@adimm/x-injection 0.5.0 → 0.5.2

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/README.md CHANGED
@@ -1,14 +1,15 @@
1
1
  <h1 align="center">
2
- xInjection&nbsp;<a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank" alt="Release Version"><img src="https://img.shields.io/npm/v/@adimm/x-injection?color=0476bc&label="></a>
3
- <img src="https://flat.badgen.net/npm/license/@adimm/x-injection" alt="License">
2
+ xInjection&nbsp;<a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank" alt="Release Version"><img src="https://badgen.net/npm/v/@adimm/x-injection"></a>
3
+ <img src="https://badgen.net/npm/license/@adimm/x-injection" alt="License">
4
+ <a href="https://app.codecov.io/gh/AdiMarianMutu/x-injection" target="__blank" alt="Release Version"><img src="https://badgen.net/codecov/c/github/AdiMarianMutu/x-injection"></a>
4
5
  </h1>
5
6
 
6
7
  <p align="center">
7
8
  <a href="https://github.com/AdiMarianMutu/x-injection/actions/workflows/ci.yml?query=branch%3Amain" target="__blank"><img src="https://github.com/AdiMarianMutu/x-injection/actions/workflows/ci.yml/badge.svg?branch=main"></a>
8
9
  <a href="https://github.com/AdiMarianMutu/x-injection/actions/workflows/publish.yml" target="__blank"><img src="https://github.com/AdiMarianMutu/x-injection/actions/workflows/publish.yml/badge.svg"></a>
9
10
  <br>
10
- <img src="https://flat.badgen.net/bundlephobia/minzip/@adimm/x-injection">
11
- <a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank" alt="Monthly Downloads"><img src="https://flat.badgen.net/npm/dm/@adimm/x-injection"></a>
11
+ <img src="https://badgen.net/bundlephobia/minzip/@adimm/x-injection">
12
+ <a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank" alt="Monthly Downloads"><img src="https://badgen.net/npm/dm/@adimm/x-injection"></a>
12
13
  </p>
13
14
 
14
15
  ## Table of Contents
@@ -25,6 +26,7 @@ xInjection&nbsp;<a href="https://www.npmjs.com/package/@adimm/x-injection" targe
25
26
  - [Custom Provider Modules](#custom-provider-modules)
26
27
  - [Dynamic Exports](#dynamic-exports)
27
28
  - [Advanced Usage](#advanced-usage)
29
+ - [Unit Tests](#unit-tests)
28
30
  - [Documentation](#documentation)
29
31
  - [ReactJS Implementation](#reactjs-implementation)
30
32
  - [Contributing](#contributing)
@@ -304,6 +306,48 @@ const globalContainer = GlobalContainer || AppModule.toNaked().container;
304
306
 
305
307
  For advanced scenarios, `IProviderModuleNaked` exposes additional methods (prefixed with `__`) that wrap InversifyJS APIs, supporting native `xInjection` provider tokens and more.
306
308
 
309
+ ## Unit Tests
310
+
311
+ It is very easy to create mock modules so you can use them in your unit tests.
312
+
313
+ ```ts
314
+ class ApiService {
315
+ constructor(private readonly userService: UserService) {}
316
+
317
+ async sendRequest<T>(location: LocationParams): Promise<T> {
318
+ // Pseudo Implementation
319
+ return this.sendToLocation(user, location);
320
+ }
321
+
322
+ private async sendToLocation(user: User, location: any): Promise<any> {}
323
+ }
324
+
325
+ const ApiModule = new ProviderModule({
326
+ identifier: Symbol('ApiModule'),
327
+ providers: [UserService, ApiService],
328
+ });
329
+
330
+ const ApiModuleMocked = new ProviderModule({
331
+ identifier: Symbol('ApiModule_MOCK'),
332
+ providers: [
333
+ {
334
+ provide: UserService,
335
+ useClass: UserService_Mock,
336
+ },
337
+ {
338
+ provide: ApiService,
339
+ useValue: {
340
+ sendRequest: async (location) => {
341
+ console.log(location);
342
+ },
343
+ },
344
+ },
345
+ ],
346
+ });
347
+ ```
348
+
349
+ Now what you have to do is just to provide the `ApiModuleMocked` instead of the `ApiModule` 😎
350
+
307
351
  ## Documentation
308
352
 
309
353
  Comprehensive, auto-generated documentation is available at:
package/dist/index.cjs CHANGED
@@ -11,29 +11,29 @@ var e, i = Object.defineProperty, t = Object.getOwnPropertyDescriptor, n = Objec
11
11
  enumerable: !0
12
12
  });
13
13
  })(s, {
14
- AppModule: () => Y,
14
+ AppModule: () => J,
15
15
  GLOBAL_APP_MODULE_ID: () => d,
16
- GlobalAppModule: () => H,
17
- GlobalContainer: () => X,
16
+ GlobalAppModule: () => Y,
17
+ GlobalContainer: () => L,
18
18
  Inject: () => E,
19
- InjectFromBase: () => D,
19
+ InjectFromBase: () => w,
20
20
  Injectable: () => I,
21
+ InjectionDynamicExportsOutOfRange: () => V,
22
+ InjectionError: () => N,
23
+ InjectionProviderModuleDisposedError: () => G,
24
+ InjectionProviderModuleError: () => U,
25
+ InjectionProviderModuleMissingIdentifierError: () => W,
21
26
  InjectionScope: () => a,
22
27
  MultiInject: () => P,
23
28
  Named: () => B,
24
29
  Optional: () => j,
25
30
  PostConstruct: () => k,
26
31
  PreDestroy: () => A,
27
- ProviderModule: () => z,
32
+ ProviderModule: () => H,
28
33
  ProviderModuleHelpers: () => l,
29
34
  ProviderTokenHelpers: () => p,
30
35
  Tagged: () => R,
31
36
  Unmanaged: () => q,
32
- XInjectionDynamicExportsOutOfRange: () => V,
33
- XInjectionError: () => N,
34
- XInjectionProviderModuleDisposedError: () => G,
35
- XInjectionProviderModuleError: () => U,
36
- XInjectionProviderModuleMissingIdentifierError: () => W,
37
37
  bindingScopeToInjectionScope: () => h,
38
38
  injectionScopeToBindingScope: () => u,
39
39
  isClass: () => v,
@@ -202,16 +202,16 @@ o(P, "MultiInject");
202
202
 
203
203
  var _ = require("inversify");
204
204
 
205
- function D(e) {
205
+ function w(e) {
206
206
  return (0, _.injectFromBase)(e);
207
207
  }
208
208
 
209
- o(D, "InjectFromBase");
209
+ o(w, "InjectFromBase");
210
210
 
211
- var w = require("inversify");
211
+ var D = require("inversify");
212
212
 
213
213
  function B(e) {
214
- return (0, w.named)(e);
214
+ return (0, D.named)(e);
215
215
  }
216
216
 
217
217
  o(B, "Named");
@@ -258,12 +258,12 @@ o(q, "Unmanaged");
258
258
 
259
259
  var N = class e extends Error {
260
260
  static {
261
- o(this, "XInjectionError");
261
+ o(this, "InjectionError");
262
262
  }
263
263
  name=e.name;
264
264
  }, U = class e extends Error {
265
265
  static {
266
- o(this, "XInjectionProviderModuleError");
266
+ o(this, "InjectionProviderModuleError");
267
267
  }
268
268
  name=e.name;
269
269
  constructor(e, i) {
@@ -271,7 +271,7 @@ var N = class e extends Error {
271
271
  }
272
272
  }, G = class e extends U {
273
273
  static {
274
- o(this, "XInjectionProviderModuleDisposedError");
274
+ o(this, "InjectionProviderModuleDisposedError");
275
275
  }
276
276
  name=e.name;
277
277
  constructor(e) {
@@ -279,7 +279,7 @@ var N = class e extends Error {
279
279
  }
280
280
  }, V = class e extends U {
281
281
  static {
282
- o(this, "XInjectionDynamicExportsOutOfRange");
282
+ o(this, "InjectionDynamicExportsOutOfRange");
283
283
  }
284
284
  name=e.name;
285
285
  constructor(e) {
@@ -287,20 +287,20 @@ var N = class e extends Error {
287
287
  }
288
288
  }, W = class e extends U {
289
289
  static {
290
- o(this, "XInjectionProviderModuleMissingIdentifierError");
290
+ o(this, "InjectionProviderModuleMissingIdentifierError");
291
291
  }
292
292
  name=e.name;
293
293
  constructor(e) {
294
294
  super(e, "An `identifier` must be supplied!");
295
295
  }
296
- }, X = new (require("inversify").Container)({
296
+ }, L = new (require("inversify").Container)({
297
297
  defaultScope: "Singleton"
298
- }), L = require("inversify"), $ = class {
298
+ }), $ = require("inversify"), z = class {
299
299
  static {
300
300
  o(this, "ProviderModuleUtils");
301
301
  }
302
302
  get container() {
303
- return this.module.toNaked().container;
303
+ return this.moduleNaked.container;
304
304
  }
305
305
  module;
306
306
  moduleNaked;
@@ -349,7 +349,7 @@ var N = class e extends Error {
349
349
  const t = e;
350
350
  t.onEvent?.activation && i.onActivation(t.onEvent.activation), t.onEvent?.deactivation && i.onDeactivation(t.onEvent.deactivation);
351
351
  }
352
- }, z = class e {
352
+ }, H = class e {
353
353
  static {
354
354
  o(this, "ProviderModule");
355
355
  }
@@ -404,10 +404,9 @@ var N = class e extends Error {
404
404
  }
405
405
  clone(i) {
406
406
  let t = [ ...this.providers ];
407
- return i?.providersMap && (t = t.map((e => i.providersMap(e, this, !1)))), new e(l.buildInternalConstructorParams({
407
+ return i?.providersMap && (t = t.map((e => i.providersMap(e, this)))), new e(l.buildInternalConstructorParams({
408
408
  isAppModule: this.isAppModule,
409
409
  identifier: this.identifier,
410
- isDisposed: this.isDisposed,
411
410
  defaultScope: this.defaultScope.native,
412
411
  dynamicExports: this.dynamicExports,
413
412
  onReady: this.onReady,
@@ -426,9 +425,9 @@ var N = class e extends Error {
426
425
  return e;
427
426
  }
428
427
  prepareContainer(e) {
429
- return this.isAppModule ? e.container?.() ?? X : e.container ? (console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`),
430
- e.container()) : new L.Container({
431
- parent: X,
428
+ return this.isAppModule ? e.container?.() ?? L : e.container ? (console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`),
429
+ e.container()) : new $.Container({
430
+ parent: L,
432
431
  defaultScope: this.defaultScope.inversify
433
432
  });
434
433
  }
@@ -491,7 +490,7 @@ var N = class e extends Error {
491
490
  }, this.dynamicExports = r, this.onReady = o, this.onDispose = s, this.importedProvidersMap = d.importedProvidersMap ?? (e => e),
492
491
  this.container = this.prepareContainer({
493
492
  ...d
494
- }), this.moduleUtils = new $(this), this.registeredBindingSideEffects = new Map,
493
+ }), this.moduleUtils = new z(this), this.registeredBindingSideEffects = new Map,
495
494
  this.injectImportedModules(this._getImportedModules()), this.injectProviders(),
496
495
  this.onReady?.(this), this;
497
496
  }
@@ -566,7 +565,7 @@ var N = class e extends Error {
566
565
  async __unbindAll() {
567
566
  this.shouldThrowIfDisposed(), await this.container.unbindAll(), this.removeRegisteredBindingSideEffects("all");
568
567
  }
569
- }, H = class extends z {
568
+ }, Y = class extends H {
570
569
  static {
571
570
  o(this, "GlobalAppModule");
572
571
  }
@@ -588,4 +587,4 @@ var N = class e extends Error {
588
587
  async _dispose() {
589
588
  this.isLoaded = !1, super._dispose();
590
589
  }
591
- }, Y = new H;//# sourceMappingURL=index.cjs.map
590
+ }, J = new Y;//# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/decorators/injectable.ts","../src/enums/injection-scope.enum.ts","../src/helpers/scope-converter.ts","../src/helpers/provider-token.ts","../src/helpers/is-class.ts","../src/helpers/is-class-or-function.ts","../src/helpers/is-function.ts","../src/helpers/is-plain-object.ts","../src/helpers/provider-module.ts","../src/decorators/inject.ts","../src/decorators/multi-inject.ts","../src/decorators/inject-from-base.ts","../src/decorators/named.ts","../src/decorators/optional.ts","../src/decorators/post-construct.ts","../src/decorators/pre-destroy.ts","../src/decorators/tagged.ts","../src/decorators/unmanaged.ts","../src/errors/base.error.ts","../src/errors/provider-module.error.ts","../src/errors/provider-module-disposed.error.ts","../src/errors/dynamic-export-out-of-range.error.ts","../src/errors/provider-module-missing-identifier.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/app.module.ts"],"sourcesContent":["export * from './core/constants';\nexport * from './decorators';\nexport * from './errors';\nexport * from './enums';\nexport * from './helpers';\n\nexport { GlobalContainer, AppModule, GlobalAppModule, ProviderModule } from './core';\n\nexport type {\n IAppModule,\n AppModuleOptions,\n ProviderModuleOptions,\n ProviderModuleOptionsInternal,\n IProviderModule,\n IProviderModuleNaked,\n StaticExports,\n DynamicExports,\n ProviderModuleGetManySignature,\n ProviderModuleGetManyParam,\n DependencyProvider,\n ProviderToken,\n ProviderClassToken,\n ProviderValueToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderScopeOption,\n LazyInitOptions,\n OnEvent,\n CloneParams,\n} from './types';\n","/** The identifier of the `GlobalAppModule`. */\nexport const GLOBAL_APP_MODULE_ID = 'GlobalAppModule';\n","import { injectable as _injectable } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { injectionScopeToBindingScope } from '../helpers';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectable} for more details. */\nexport function Injectable(scope?: InjectionScope) {\n if (scope === undefined) return _injectable();\n\n return _injectable(injectionScopeToBindingScope(scope));\n}\n","export enum InjectionScope {\n /** When the service is resolved, the same cached resolved value will be used. */\n Singleton,\n\n /** When the service is resolved, a new resolved value will be used each time. */\n Transient,\n\n /** When the service is resolved within the same container request, the same resolved value will be used. */\n Request,\n}\n","import type { BindingScope } from 'inversify';\n\nimport { InjectionScope } from '../enums';\n\nexport function injectionScopeToBindingScope(injectionScope: InjectionScope): BindingScope {\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return 'Singleton';\n case InjectionScope.Transient:\n return 'Transient';\n case InjectionScope.Request:\n return 'Request';\n }\n}\n\nexport function bindingScopeToInjectionScope(bindingScope: BindingScope): InjectionScope {\n switch (bindingScope) {\n case 'Singleton':\n return InjectionScope.Singleton;\n case 'Transient':\n return InjectionScope.Transient;\n case 'Request':\n return InjectionScope.Request;\n }\n}\n","import { getClassMetadata } from '@inversifyjs/core';\nimport type { ServiceIdentifier } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport type {\n DependencyProvider,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderScopeOption,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\nimport { isClass } from './is-class';\nimport { isClassOrFunction } from './is-class-or-function';\nimport { isFunction } from './is-function';\nimport { isPlainObject } from './is-plain-object';\nimport { bindingScopeToInjectionScope } from './scope-converter';\n\nexport namespace ProviderTokenHelpers {\n export function isClassToken<T>(provider: ProviderToken<T>): provider is ProviderClassToken<T> {\n return hasProvideProperty(provider) && 'useClass' in provider;\n }\n\n export function isValueToken<T>(provider: ProviderToken<T>): provider is ProviderValueToken<T> {\n return hasProvideProperty(provider) && 'useValue' in provider;\n }\n\n export function isFactoryToken<T>(provider: ProviderToken<T>): provider is ProviderFactoryToken<T> {\n return hasProvideProperty(provider) && 'useFactory' in provider;\n }\n\n export function isProviderIdentifier<T = any>(value: any): value is ProviderIdentifier<T> {\n return typeof value === 'string' || typeof value === 'symbol' || isClassOrFunction(value);\n }\n\n export function toServiceIdentifier<T = any>(provider: ProviderToken<T>): ServiceIdentifier<T> {\n return isProviderIdentifier(provider) ? provider : provider.provide;\n }\n\n export function toServiceIdentifiers(providers: ProviderToken[]): ServiceIdentifier<unknown>[] {\n return providers.map((provider) => toServiceIdentifier(provider));\n }\n\n export function toDependencyProviderWithOptions<T extends DependencyProvider<any>>(\n original: T,\n // Can be used to override the options\n override?: Partial<T>\n ): T {\n if (isClass(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useClass: (override as any)?.useClass ?? original,\n };\n } else if (isFunction(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useFactory: (override as any)?.useFactory ?? original,\n };\n }\n\n return {\n ...original,\n ...override,\n };\n }\n\n /**\n * The priority order is as follows:\n * 1. From the `ProviderToken.scope`\n * 2. From the class `@Injectable(scope)` decorator\n * 3. From the `ProviderModule` default scope.\n *\n * @param provider The {@link ProviderToken}.\n * @param moduleDefaultScope The module default scope.\n */\n export function getInjectionScopeByPriority(\n provider: ProviderToken,\n moduleDefaultScope: InjectionScope\n ): InjectionScope {\n return tryGetScopeFromProvider(provider) ?? tryGetDecoratorScopeFromClass(provider) ?? moduleDefaultScope;\n }\n\n export function tryGetProviderOptions<T>(\n provider: ProviderToken<T>\n ): (ProviderOptions<T> & ProviderScopeOption) | undefined {\n if (!hasProvideProperty(provider)) return;\n\n return provider as any;\n }\n\n export function tryGetScopeFromProvider(provider: ProviderToken): InjectionScope | undefined {\n const providerOptions = tryGetProviderOptions(provider);\n if (!providerOptions) return;\n\n return providerOptions.scope;\n }\n\n export function tryGetDecoratorScopeFromClass<T = any>(provider: ProviderToken<T>): InjectionScope | undefined {\n const providerClass = toServiceIdentifier(provider);\n if (!isClass(providerClass)) return;\n\n const inversifyScope = getClassMetadata(providerClass as any)?.scope;\n if (!inversifyScope) return;\n\n return bindingScopeToInjectionScope(inversifyScope);\n }\n\n function hasProvideProperty(provider: any): provider is object {\n return isPlainObject(provider) && typeof provider === 'object' && 'provide' in provider;\n }\n}\n","export function isClass(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return Function.prototype.toString.call(v).startsWith('class ');\n}\n","import type { Class } from 'type-fest';\n\nexport function isClassOrFunction(value: any): value is Function | Class<any> {\n return typeof value === 'function';\n}\n","export function isFunction(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return !Function.prototype.toString.call(v).startsWith('class ');\n}\n","/*\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: any): o is object {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import type { DynamicExports, ProviderModuleOptions, ProviderModuleOptionsInternal, StaticExports } from '../types';\n\nexport namespace ProviderModuleHelpers {\n export function buildInternalConstructorParams(\n params: ProviderModuleOptions & ProviderModuleOptionsInternal\n ): ProviderModuleOptions {\n return params as ProviderModuleOptions;\n }\n\n export function isDynamicExport(exporter: StaticExports | DynamicExports): exporter is DynamicExports {\n return !Array.isArray(exporter) && typeof exporter === 'function';\n }\n}\n","import { inject as _inject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#inject} for more details. */\nexport function Inject(provider: ProviderToken) {\n return _inject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { multiInject as _multiInject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#multiinject} for more details. */\nexport function MultiInject(provider: ProviderToken) {\n return _multiInject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { injectFromBase as _injectFromBase } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectfrombase} for more details. */\nexport function InjectFromBase(options?: Parameters<typeof _injectFromBase>[0]) {\n return _injectFromBase(options);\n}\n","import { named as _named, type MetadataName } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#named} for more details. */\nexport function Named(name: MetadataName) {\n return _named(name);\n}\n","import { optional as _optional } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#optional} for more details. */\nexport function Optional() {\n return _optional();\n}\n","import { postConstruct as _postConstruct } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#postconstruct} for more details. */\nexport function PostConstruct() {\n return _postConstruct();\n}\n","import { preDestroy as _preDestroy } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#predestroy} for more details. */\nexport function PreDestroy() {\n return _preDestroy();\n}\n","import { tagged as _tagged, type MetadataTag } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#tagged} for more details. */\nexport function Tagged(key: MetadataTag, value: unknown) {\n return _tagged(key, value);\n}\n","import { unmanaged as _unmanaged } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#unmanaged} for more details. */\nexport function Unmanaged() {\n return _unmanaged();\n}\n","/** Exception which indicates that there is a generic error. */\nexport class XInjectionError extends Error {\n name = XInjectionError.name;\n}\n","import type { IProviderModule } from '../types';\n\n/** Exception which indicates that there is a generic error with an instance of {@link IProviderModule}. */\nexport class XInjectionProviderModuleError extends Error {\n name = XInjectionProviderModuleError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(`{ProviderModule.${module.toString()}} => ${message}`);\n }\n}\n","import { IProviderModule } from '../types';\nimport { XInjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an invokation of a disposed module. */\nexport class XInjectionProviderModuleDisposedError extends XInjectionProviderModuleError {\n name = XInjectionProviderModuleDisposedError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'Has been disposed! You can re-initialize it by using the `_lazyInit` method.');\n }\n}\n","import type { IProviderModule } from '../types';\nimport { XInjectionProviderModuleError } from './provider-module.error';\n\n/**\n * Exception which indicates that an instance of {@link IProviderModule}\n * imports another module which dynamically exports its providers/modules and\n * is trying to dynamically export more or different providers/modules than the\n * ones declared into its static exports.\n */\nexport class XInjectionDynamicExportsOutOfRange extends XInjectionProviderModuleError {\n name = XInjectionDynamicExportsOutOfRange.name;\n\n constructor(module: IProviderModule) {\n super(\n module,\n `The 'ProviderModule.${module.toString()}' is trying to dynamically export providers/modules out of the declared range of the static exports!`\n );\n }\n}\n","import { IProviderModule } from '../types';\nimport { XInjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates that a module has been initialized without an `identifier`. */\nexport class XInjectionProviderModuleMissingIdentifierError extends XInjectionProviderModuleError {\n name = XInjectionProviderModuleMissingIdentifierError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'An `identifier` must be supplied!');\n }\n}\n","import { Container } from 'inversify';\n\n/**\n * The low-level App Container.\n *\n * **Internally used, please use the `AppModule` to interact with it.**\n */\nexport const GlobalContainer = new Container({\n defaultScope: 'Singleton',\n});\n","import {\r\n Container,\r\n type BindingActivation,\r\n type BindingDeactivation,\r\n type BindToFluentSyntax,\r\n type GetOptions,\r\n type IsBoundOptions,\r\n} from 'inversify';\r\n\r\nimport { InjectionScope } from '../enums';\r\nimport {\r\n XInjectionDynamicExportsOutOfRange,\r\n XInjectionProviderModuleDisposedError,\r\n XInjectionProviderModuleError,\r\n XInjectionProviderModuleMissingIdentifierError,\r\n} from '../errors';\r\nimport { injectionScopeToBindingScope, isPlainObject, ProviderModuleHelpers, ProviderTokenHelpers } from '../helpers';\r\nimport type {\r\n CloneParams,\r\n DependencyProvider,\r\n IProviderModule,\r\n IProviderModuleNaked,\r\n LazyInitOptions,\r\n ProviderModuleGetManyParam,\r\n ProviderModuleGetManySignature,\r\n ProviderModuleOptions,\r\n ProviderModuleOptionsInternal,\r\n ProviderToken,\r\n RegisteredBindingSideEffects,\r\n StaticExports,\r\n} from '../types';\r\nimport { ProviderModuleUtils } from '../utils';\r\nimport { GlobalContainer } from './global-container';\r\n\r\n/**\r\n * Modules are highly recommended as an effective way to organize your components.\r\n * For most applications, you'll likely have multiple modules, each encapsulating a closely related set of capabilities.\r\n *\r\n * _See {@link ProviderModuleOptions | ProviderModuleOptions}_.\r\n *\r\n * @example\r\n * ```ts\r\n * import { ProviderModule } from '@adimm/x-injection';\r\n *\r\n * const EngineModule = new ProviderModule({\r\n * identifier: Symbol('EngineModule'),\r\n * providers: [EngineService],\r\n * exports: [EngineService]\r\n * });\r\n *\r\n * const DashboardModule = new ProviderModule({\r\n * identifier: Symbol('DashboardModule'),\r\n * providers: [DashboardService],\r\n * exports: [DashboardService]\r\n * });\r\n *\r\n * const CarModule = new ProviderModule({\r\n * identifier: Symbol('CarModule'),\r\n * imports: [EngineModule, DashboardModule],\r\n * providers: [CarService],\r\n * exports: [CarService]\r\n * });\r\n *\r\n * // Run-time class replacement:\r\n * const RedCarModule = new ProviderModule({\r\n * identifier: Symbol('RedCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useClass: RedCarService,\r\n * }\r\n * ],\r\n * });\r\n *\r\n * // Run-time factory example:\r\n * const BlackCarModule = new ProviderModule({\r\n * identifier: Symbol('BlackCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useFactory: (carService: CarService) => {\r\n * carService.setColor('black');\r\n *\r\n * return carService;\r\n * },\r\n * inject: [CarService]\r\n * }\r\n * ],\r\n * });\r\n * ```\r\n */\r\nexport class ProviderModule implements IProviderModule {\r\n readonly identifier: symbol;\r\n readonly isDisposed: boolean = false;\r\n\r\n protected readonly isAppModule: boolean;\r\n protected readonly container!: Container;\r\n protected readonly defaultScope!: IProviderModuleNaked['defaultScope'];\r\n protected readonly dynamicExports: IProviderModuleNaked['dynamicExports'];\r\n protected readonly onReady: IProviderModuleNaked['onReady'];\r\n protected readonly onDispose: IProviderModuleNaked['onDispose'];\r\n protected readonly importedProvidersMap: IProviderModuleNaked['importedProvidersMap'];\r\n protected readonly moduleUtils!: IProviderModuleNaked['moduleUtils'];\r\n protected readonly imports!: IProviderModuleNaked['imports'];\r\n protected readonly providers!: IProviderModuleNaked['providers'];\r\n protected readonly importedProviders!: IProviderModuleNaked['importedProviders'];\r\n protected readonly exports!: IProviderModuleNaked['exports'];\r\n\r\n private readonly registeredBindingSideEffects!: RegisteredBindingSideEffects;\r\n\r\n constructor({\r\n identifier,\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: ProviderModuleOptions) {\r\n const internalParams = _internalParams as ProviderModuleOptionsInternal;\r\n\r\n // The module id once set should never be changed!\r\n this.identifier = this.setIdentifier(identifier);\r\n this.isDisposed = internalParams.isDisposed ?? false;\r\n // Same goes for the `isAppModule`.\r\n this.isAppModule = internalParams.isAppModule ?? false;\r\n\r\n // If this module is the `AppModule`,\r\n // the initialization will be done when the `IProviderModuleNaked._lazyInit` method is invoked.\r\n if (this.isAppModule) return;\r\n\r\n this._lazyInit({\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams,\r\n });\r\n }\r\n\r\n get<T>(provider: ProviderToken<T>, isOptional?: boolean): T {\r\n return this.__get(provider, { optional: isOptional ?? false });\r\n }\r\n\r\n getMany<D extends (ProviderModuleGetManyParam<any> | ProviderToken)[]>(\r\n ...deps: D | unknown[]\r\n ): ProviderModuleGetManySignature<D> {\r\n return (deps as D).map((dep) => {\r\n const withOptions = isPlainObject(dep) && 'provider' in dep;\r\n\r\n return this.get(withOptions ? dep.provider : dep, withOptions ? dep.isOptional : false);\r\n }) as any;\r\n }\r\n\r\n onActivationEvent<T>(provider: ProviderToken<T>, cb: BindingActivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onActivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n onDeactivationEvent<T>(provider: ProviderToken<T>, cb: BindingDeactivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onDeactivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n toNaked(): IProviderModuleNaked {\r\n return this as any;\r\n }\r\n\r\n clone(options?: CloneParams): IProviderModule {\r\n let providers = [...this.providers];\r\n\r\n if (options?.providersMap) {\r\n providers = providers.map((provider) => options.providersMap!(provider, this, false));\r\n }\r\n\r\n return new ProviderModule(\r\n ProviderModuleHelpers.buildInternalConstructorParams({\r\n isAppModule: this.isAppModule,\r\n identifier: this.identifier,\r\n isDisposed: this.isDisposed,\r\n defaultScope: this.defaultScope.native,\r\n dynamicExports: this.dynamicExports,\r\n onReady: this.onReady,\r\n onDispose: this.onDispose,\r\n importedProvidersMap: options?.importedProvidersMap,\r\n imports: [...this.imports],\r\n providers,\r\n exports: [...this.exports],\r\n })\r\n );\r\n }\r\n\r\n toString(): string {\r\n return this.identifier?.description ?? 'Unknown';\r\n }\r\n\r\n private setIdentifier(identifier: symbol): symbol {\r\n if (!identifier) throw new XInjectionProviderModuleMissingIdentifierError(this);\r\n\r\n return identifier;\r\n }\r\n\r\n private prepareContainer(params: ProviderModuleOptionsInternal): Container {\r\n if (this.isAppModule) {\r\n return params.container?.() ?? GlobalContainer;\r\n } else if (params.container) {\r\n console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`);\r\n\r\n return params.container();\r\n } else {\r\n return new Container({\r\n parent: GlobalContainer,\r\n defaultScope: this.defaultScope.inversify,\r\n });\r\n }\r\n }\r\n\r\n private injectImportedModules(modules?: IProviderModuleNaked[]): void {\r\n if (!modules || modules.length === 0) return;\r\n\r\n modules.forEach((module) => {\r\n if (module.toString() === 'GlobalAppModule') {\r\n throw new XInjectionProviderModuleError(this, `The 'GlobalAppModule' can't be imported!`);\r\n }\r\n\r\n const moduleStaticExports = module._getExportableModulesAndProviders();\r\n const moduleDynamicExports = module.dynamicExports?.(this, moduleStaticExports);\r\n const moduleHasDynamicExports = moduleDynamicExports !== undefined;\r\n\r\n if (moduleHasDynamicExports) {\r\n this.shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module,\r\n moduleStaticExports,\r\n moduleDynamicExports\r\n );\r\n }\r\n\r\n (moduleDynamicExports ?? moduleStaticExports).forEach((exportable) => {\r\n if (exportable instanceof ProviderModule) {\r\n const exportableModule = exportable.toNaked();\r\n\r\n // The current item of the `exports` array is actually\r\n // another ProviderModule, therefore we must recursively drill into it\r\n // to import its exported modules/providers.\r\n this.injectImportedModules([exportableModule]);\r\n\r\n return;\r\n }\r\n\r\n const provider = exportable as DependencyProvider;\r\n const importedProvider = this.importedProvidersMap!(\r\n {\r\n scope: ProviderTokenHelpers.getInjectionScopeByPriority(provider, module.defaultScope.native),\r\n provide: ProviderTokenHelpers.toServiceIdentifier(provider),\r\n useFactory: () => module.get(provider),\r\n // As we are using a factory token, there is no need to include the `onEvent` and `when` properties\r\n // into the processed `ProviderToken` created for this imported provider,\r\n // because the `importedModule.get` invokation will\r\n // fire the `onEvent` and `when` properties of the original imported provider.\r\n },\r\n provider,\r\n module\r\n );\r\n\r\n this.importedProviders.set(module, [...(this.importedProviders.get(module) ?? []), importedProvider]);\r\n\r\n this.moduleUtils.bindToContainer(importedProvider, module.defaultScope.native);\r\n\r\n // Let's make sure that when the parent module unbinds the provider\r\n // this module unbinds it aswell.\r\n module._onUnbind(provider, () => this.__unbind(importedProvider));\r\n });\r\n });\r\n }\r\n\r\n private injectProviders(): void {\r\n this.providers.forEach((provider) => this.moduleUtils.bindToContainer(provider, this.defaultScope.native));\r\n }\r\n\r\n private registerBindingSideEffect(\r\n provider: ProviderToken,\r\n on: 'bind' | 'rebind' | 'unbind',\r\n cb: () => Promise<void> | void\r\n ): void {\r\n if (!this.registeredBindingSideEffects.has(provider)) {\r\n this.registeredBindingSideEffects.set(provider, {\r\n onBindEffects: [],\r\n onRebindEffects: [],\r\n onUnbindEffects: [],\r\n });\r\n }\r\n\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider)!;\r\n\r\n if (on === 'bind') {\r\n providerBindingSideEffects.onBindEffects.push(cb);\r\n } else if (on === 'rebind') {\r\n providerBindingSideEffects.onRebindEffects.push(cb);\r\n } else {\r\n providerBindingSideEffects.onUnbindEffects.push(cb);\r\n }\r\n }\r\n\r\n private invokeRegisteredBindingSideEffects(provider: ProviderToken, event: 'onBind' | 'onRebind' | 'onUnbind'): void {\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider);\r\n /* istanbul ignore next */\r\n if (!providerBindingSideEffects) return;\r\n\r\n providerBindingSideEffects[`${event}Effects`].forEach((cb) => cb());\r\n }\r\n\r\n private removeRegisteredBindingSideEffects(provider: ProviderToken | 'all'): void {\r\n /* istanbul ignore next */\r\n if (!this.registeredBindingSideEffects) return;\r\n\r\n if (provider === 'all') {\r\n this.registeredBindingSideEffects.forEach(({ onUnbindEffects }) => onUnbindEffects.forEach((cb) => cb()));\r\n\r\n return;\r\n }\r\n\r\n if (!this.registeredBindingSideEffects.has(provider)) return;\r\n\r\n this.registeredBindingSideEffects.get(provider)?.onUnbindEffects.forEach((cb) => cb());\r\n this.registeredBindingSideEffects.delete(provider);\r\n }\r\n\r\n private shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module: IProviderModuleNaked,\r\n staticExports: StaticExports,\r\n dynamicExports: StaticExports\r\n ): void {\r\n if (\r\n dynamicExports.length > staticExports.length ||\r\n dynamicExports.some((dynamicExport) => !staticExports.includes(dynamicExport))\r\n ) {\r\n throw new XInjectionDynamicExportsOutOfRange(module);\r\n }\r\n }\r\n\r\n private shouldThrowIfDisposed(): void {\r\n if (this.container !== null) return;\r\n\r\n throw new XInjectionProviderModuleDisposedError(this);\r\n }\r\n\r\n //#region IProviderModuleNaked methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._dispose}.\r\n */\r\n protected async _dispose(): Promise<void> {\r\n await this.onDispose?.(this);\r\n await this.__unbindAll();\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = null;\r\n //@ts-expect-error Read-only property.\r\n this.imports = null;\r\n //@ts-expect-error Read-only property.\r\n this.providers = null;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = null;\r\n //@ts-expect-error Read-only property.\r\n this.exports = null;\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = null;\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = null;\r\n\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = true;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._lazyInit}.\r\n */\r\n protected _lazyInit({\r\n imports = [],\r\n providers = [],\r\n exports = [],\r\n defaultScope = InjectionScope.Singleton,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: LazyInitOptions): IProviderModule {\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = false;\r\n //@ts-expect-error Read-only property.\r\n this.imports = imports;\r\n //@ts-expect-error Read-only property.\r\n this.providers = providers;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = _internalParams.importedProviders ?? new Map();\r\n //@ts-expect-error Read-only property.\r\n this.exports = exports;\r\n //@ts-expect-error Read-only property.\r\n this.defaultScope = { native: defaultScope, inversify: injectionScopeToBindingScope(defaultScope) };\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = dynamicExports;\r\n //@ts-expect-error Read-only property.\r\n this.onReady = onReady;\r\n //@ts-expect-error Read-only property.\r\n this.onDispose = onDispose;\r\n //@ts-expect-error Read-only propery.\r\n this.importedProvidersMap = _internalParams.importedProvidersMap ?? ((provider) => provider);\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = this.prepareContainer({ ..._internalParams });\r\n //@ts-expect-error Read-only property.\r\n this.moduleUtils = new ProviderModuleUtils(this);\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = new Map();\r\n\r\n this.injectImportedModules(this._getImportedModules());\r\n this.injectProviders();\r\n\r\n this.onReady?.(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getImportedModules}.\r\n */\r\n protected _getImportedModules(): IProviderModuleNaked[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.imports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getProviders}.\r\n */\r\n protected _getProviders(): DependencyProvider[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.providers;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getExportableModulesAndProviders}.\r\n */\r\n protected _getExportableModulesAndProviders(): StaticExports {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.exports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onBind}.\r\n */\r\n protected _onBind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'bind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onRebind}.\r\n */\r\n protected _onRebind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'rebind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onUnbind}.\r\n */\r\n protected _onUnbind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'unbind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._overwriteContainer}.\r\n */\r\n protected _overwriteContainer(cb: () => Container): void {\r\n //@ts-expect-error Read-only property.\r\n this.container = cb();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region InversifyJS Container native methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__bind}.\r\n */\r\n /* istanbul ignore next */\r\n protected __bind<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onBind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__get}.\r\n */\r\n /* istanbul ignore next */\r\n protected __get<T>(provider: ProviderToken<T>, options?: GetOptions): T {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.get(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected __getAll<T>(provider: ProviderToken<T>, options?: GetOptions): T[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAll(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAllAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAllAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T[]> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAllAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isCurrentBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isCurrentBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isCurrentBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__takeSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __takeSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.snapshot();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__restoreSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __restoreSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.restore();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __rebind<T>(provider: ProviderToken<T>): Promise<BindToFluentSyntax<T>> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = await this.container.rebind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __rebindSync<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.rebindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbind(provider: ProviderToken): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __unbindSync(provider: ProviderToken): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.unbindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbindAll(): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbindAll();\r\n\r\n this.removeRegisteredBindingSideEffects('all');\r\n }\r\n\r\n //#endregion\r\n}\r\n","import type { BindInWhenOnFluentSyntax, BindOnFluentSyntax, BindWhenOnFluentSyntax, Container } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\n\n/**\n * Class containing an internal set of `utils`.\n *\n * Each {@link IProviderModuleNaked.moduleUtils | ProviderModule} instance has its own {@link ProviderModuleUtils} property instance.\n */\nexport class ProviderModuleUtils {\n /** The low-level InversifyJS {@link Container} owned by {@link ProviderModuleUtils.module | module}. */\n get container(): Container {\n return this.module.toNaked().container;\n }\n\n /** The parent {@link IProviderModule | ProviderModule} of `this` instance. */\n readonly module: IProviderModule;\n readonly moduleNaked: IProviderModuleNaked;\n\n constructor(module: IProviderModule) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n }\n\n /**\n * Low-level method which can be used to manually register _(bind)_ a new {@link provider} into the {@link ProviderModuleUtils.module | module} container.\n *\n * **Note:** _You shouldn't directly use this to register providers as they will not appear_\n * _into the module's `imports` and `exports` arrays! Therefore leading to unexpected bugs and confusion!_\n *\n * @param provider The {@link ProviderToken | provider} to register.\n * @param defaultScope Optionally provide the default {@link InjectionScope} to use when applicable.\n * @returns `true` when the {@link provider} has been bound otherwhise `false`.\n */\n bindToContainer<T>(provider: DependencyProvider<T>, defaultScope: InjectionScope): boolean {\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) {\n return this.bindSelfTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isClassToken(provider)) {\n return this.bindClassTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isValueToken(provider)) {\n return this.bindValueTokenToContainer(provider);\n } else if (ProviderTokenHelpers.isFactoryToken(provider)) {\n return this.bindFactoryTokenToContainer(provider, defaultScope);\n }\n\n return false;\n }\n\n private bindSelfTokenToContainer<T>(provider: ProviderIdentifier<T>, defaultScope: InjectionScope): boolean {\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toSelf(),\n defaultScope\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindClassTokenToContainer<T>(provider: ProviderClassToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).to(provider.useClass),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindValueTokenToContainer<T>(provider: ProviderValueToken<T>): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toConstantValue(provider.useValue)\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindFactoryTokenToContainer<T>(provider: ProviderFactoryToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container\n .bind(ProviderTokenHelpers.toServiceIdentifier(provider))\n .toResolvedValue(provider.useFactory, ProviderTokenHelpers.toServiceIdentifiers(provider.inject ?? [])),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n /** Sets the {@link InjectionScope} of a bound {@link provider}. */\n private setBindingScope<T>(\n provider: ProviderToken<T>,\n binding: BindInWhenOnFluentSyntax<T>,\n defaultScope: InjectionScope\n ): BindWhenOnFluentSyntax<T> {\n // A constant token will always be a singleton.\n if (ProviderTokenHelpers.isValueToken(provider)) return binding;\n\n const injectionScope = ProviderTokenHelpers.getInjectionScopeByPriority(provider, defaultScope);\n\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return binding.inSingletonScope();\n case InjectionScope.Transient:\n return binding.inTransientScope();\n case InjectionScope.Request:\n return binding.inRequestScope();\n }\n }\n\n /** Sets the `when` clause of a bound {@link provider}. */\n private setWhenBinding<T>(\n provider: ProviderToken<T>,\n binding: BindWhenOnFluentSyntax<T>\n ): BindOnFluentSyntax<unknown> {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return binding;\n\n const when = (provider as ProviderOptions<unknown>).when;\n if (!when) return binding;\n\n return binding.when(when);\n }\n\n /** Sets the `activation` and `deactivation` events of a bound {@link provider}. */\n private setBindingOnEvent(provider: ProviderToken, binding: BindOnFluentSyntax<any>): void {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return;\n\n const opts = provider as ProviderOptions<unknown>;\n\n if (opts.onEvent?.activation) {\n binding.onActivation(opts.onEvent.activation);\n }\n\n if (opts.onEvent?.deactivation) {\n binding.onDeactivation(opts.onEvent.deactivation);\n }\n }\n}\n","import { XInjectionError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { ProviderModule } from './provider-module';\n\n/**\n * Class of the {@link AppModule} instance.\n *\n * **You shouldn't initialize a new instance of this class, please use the {@link AppModule} instance!**\n */\nexport class GlobalAppModule extends ProviderModule implements IAppModule {\n private nakedModule = this as unknown as IProviderModuleNaked;\n private isLoaded = false;\n\n constructor() {\n super(\n ProviderModuleHelpers.buildInternalConstructorParams({\n identifier: Symbol(GLOBAL_APP_MODULE_ID),\n isAppModule: true,\n })\n );\n }\n\n register<AsNaked extends boolean = false>(\n options: AppModuleOptions\n ): AsNaked extends false ? IAppModule : IAppModule & IProviderModuleNaked {\n if (this.isLoaded) {\n throw new XInjectionError(`The '${this.toString()}' has already been registered!`);\n }\n\n this.nakedModule._lazyInit(options);\n\n this.isLoaded = true;\n\n return this as any;\n }\n\n /* istanbul ignore next */\n override toNaked(): IAppModule & IProviderModuleNaked {\n return super.toNaked() as any;\n }\n\n protected override async _dispose(): Promise<void> {\n this.isLoaded = false;\n\n super._dispose();\n }\n}\n\n/**\n * Special instance of {@link ProviderModule} which acts as the global module of your application in which you can inject any provider\n * which must be available through your entire application.\n *\n * The registered providers will automatically be available inside all the modules.\n *\n * @example\n * ```ts\n * import { AppModule } from '@adimm/x-injection';\n *\n * // The `register` method must be invoked only once during your application life cycle!\n * AppModule.register({\n * imports: [ConfigModule, ApiModule, UserModule, DatabaseModule],\n * providers: [DummyService],\n * });\n * ```\n */\nexport const AppModule = new GlobalAppModule();\n"],"mappings":"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","names":["GLOBAL_APP_MODULE_ID","InjectionScope","injectionScopeToBindingScope","injectionScope","InjectionScope","Singleton","Transient","Request","bindingScopeToInjectionScope","bindingScope","isClass","v","Function","prototype","toString","call","startsWith","isClassOrFunction","value","isFunction","v","Function","prototype","toString","call","startsWith","isObject","o","Object","prototype","toString","call","isPlainObject","ctor","constructor","undefined","prot","hasOwnProperty","ProviderTokenHelpers","isClassToken","provider","hasProvideProperty","isValueToken","isFactoryToken","isProviderIdentifier","value","isClassOrFunction","toServiceIdentifier","provide","toServiceIdentifiers","providers","map","toDependencyProviderWithOptions","original","override","isClass","useClass","isFunction","useFactory","getInjectionScopeByPriority","moduleDefaultScope","tryGetScopeFromProvider","tryGetDecoratorScopeFromClass","tryGetProviderOptions","providerOptions","scope","providerClass","inversifyScope","getClassMetadata","bindingScopeToInjectionScope","isPlainObject","ProviderModuleHelpers","buildInternalConstructorParams","params","isDynamicExport","exporter","Array","isArray","Injectable","scope","undefined","_injectable","injectionScopeToBindingScope","import_inversify","Inject","provider","_inject","ProviderTokenHelpers","toServiceIdentifier","import_inversify","MultiInject","provider","_multiInject","ProviderTokenHelpers","toServiceIdentifier","import_inversify","InjectFromBase","options","_injectFromBase","import_inversify","Named","name","_named","import_inversify","Optional","_optional","import_inversify","PostConstruct","_postConstruct","import_inversify","PreDestroy","_preDestroy","import_inversify","Tagged","key","value","_tagged","import_inversify","Unmanaged","_unmanaged","XInjectionError","Error","name","XInjectionProviderModuleError","Error","name","constructor","module","message","toString","XInjectionProviderModuleDisposedError","XInjectionProviderModuleError","name","constructor","module","XInjectionDynamicExportsOutOfRange","XInjectionProviderModuleError","name","constructor","module","toString","XInjectionProviderModuleMissingIdentifierError","XInjectionProviderModuleError","name","constructor","module","import_inversify","GlobalContainer","Container","defaultScope","import_inversify","ProviderModuleUtils","container","module","toNaked","moduleNaked","constructor","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","setBindingScope","bind","toServiceIdentifier","toSelf","__isCurrentBound","setBindingOnEvent","setWhenBinding","to","useClass","toConstantValue","useValue","toResolvedValue","useFactory","toServiceIdentifiers","inject","binding","injectionScope","getInjectionScopeByPriority","InjectionScope","Singleton","inSingletonScope","Transient","inTransientScope","Request","inRequestScope","when","opts","onEvent","activation","onActivation","deactivation","onDeactivation","ProviderModule","identifier","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","_internalParams","internalParams","setIdentifier","_lazyInit","get","provider","isOptional","__get","optional","getMany","deps","map","dep","withOptions","isPlainObject","onActivationEvent","cb","shouldThrowIfDisposed","onActivation","ProviderTokenHelpers","toServiceIdentifier","onDeactivationEvent","onDeactivation","toNaked","clone","options","providersMap","ProviderModuleHelpers","buildInternalConstructorParams","native","toString","description","XInjectionProviderModuleMissingIdentifierError","prepareContainer","params","GlobalContainer","console","warn","Container","parent","inversify","injectImportedModules","modules","length","forEach","module","XInjectionProviderModuleError","moduleStaticExports","_getExportableModulesAndProviders","moduleDynamicExports","moduleHasDynamicExports","undefined","shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports","exportable","exportableModule","importedProvider","scope","getInjectionScopeByPriority","provide","useFactory","set","bindToContainer","_onUnbind","__unbind","injectProviders","registerBindingSideEffect","on","has","onBindEffects","onRebindEffects","onUnbindEffects","providerBindingSideEffects","push","invokeRegisteredBindingSideEffects","event","removeRegisteredBindingSideEffects","delete","staticExports","some","dynamicExport","includes","XInjectionDynamicExportsOutOfRange","XInjectionProviderModuleDisposedError","_dispose","__unbindAll","InjectionScope","Singleton","Map","injectionScopeToBindingScope","ProviderModuleUtils","_getImportedModules","_getProviders","_onBind","_onRebind","_overwriteContainer","__bind","binding","bind","__getAsync","getAsync","__getAll","getAll","__getAllAsync","getAllAsync","__isBound","isBound","__isCurrentBound","isCurrentBound","__takeSnapshot","snapshot","__restoreSnapshot","restore","__rebind","rebind","__rebindSync","rebindSync","unbind","__unbindSync","unbindSync","unbindAll","GlobalAppModule","ProviderModule","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","XInjectionError","toString","_lazyInit","toNaked","_dispose","AppModule"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/constants.ts","../src/decorators/injectable.ts","../src/enums/injection-scope.enum.ts","../src/helpers/scope-converter.ts","../src/helpers/provider-token.ts","../src/helpers/is-class.ts","../src/helpers/is-class-or-function.ts","../src/helpers/is-function.ts","../src/helpers/is-plain-object.ts","../src/helpers/provider-module.ts","../src/decorators/inject.ts","../src/decorators/multi-inject.ts","../src/decorators/inject-from-base.ts","../src/decorators/named.ts","../src/decorators/optional.ts","../src/decorators/post-construct.ts","../src/decorators/pre-destroy.ts","../src/decorators/tagged.ts","../src/decorators/unmanaged.ts","../src/errors/base.error.ts","../src/errors/provider-module.error.ts","../src/errors/provider-module-disposed.error.ts","../src/errors/dynamic-export-out-of-range.error.ts","../src/errors/provider-module-missing-identifier.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/app.module.ts"],"sourcesContent":["export * from './core/constants';\nexport * from './decorators';\nexport * from './errors';\nexport * from './enums';\nexport * from './helpers';\n\nexport { GlobalContainer, AppModule, GlobalAppModule, ProviderModule } from './core';\n\nexport type {\n IAppModule,\n AppModuleOptions,\n ProviderModuleOptions,\n ProviderModuleOptionsInternal,\n IProviderModule,\n IProviderModuleNaked,\n StaticExports,\n DynamicExports,\n ProviderModuleGetManySignature,\n ProviderModuleGetManyParam,\n DependencyProvider,\n ProviderToken,\n ProviderClassToken,\n ProviderValueToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderScopeOption,\n LazyInitOptions,\n OnEvent,\n CloneParams,\n} from './types';\n","/** The identifier of the `GlobalAppModule`. */\nexport const GLOBAL_APP_MODULE_ID = 'GlobalAppModule';\n","import { injectable as _injectable } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { injectionScopeToBindingScope } from '../helpers';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectable} for more details. */\nexport function Injectable(scope?: InjectionScope) {\n if (scope === undefined) return _injectable();\n\n return _injectable(injectionScopeToBindingScope(scope));\n}\n","export enum InjectionScope {\n /** When the service is resolved, the same cached resolved value will be used. */\n Singleton,\n\n /** When the service is resolved, a new resolved value will be used each time. */\n Transient,\n\n /** When the service is resolved within the same container request, the same resolved value will be used. */\n Request,\n}\n","import type { BindingScope } from 'inversify';\n\nimport { InjectionScope } from '../enums';\n\nexport function injectionScopeToBindingScope(injectionScope: InjectionScope): BindingScope {\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return 'Singleton';\n case InjectionScope.Transient:\n return 'Transient';\n case InjectionScope.Request:\n return 'Request';\n }\n}\n\nexport function bindingScopeToInjectionScope(bindingScope: BindingScope): InjectionScope {\n switch (bindingScope) {\n case 'Singleton':\n return InjectionScope.Singleton;\n case 'Transient':\n return InjectionScope.Transient;\n case 'Request':\n return InjectionScope.Request;\n }\n}\n","import { getClassMetadata } from '@inversifyjs/core';\nimport type { ServiceIdentifier } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport type {\n DependencyProvider,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderScopeOption,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\nimport { isClass } from './is-class';\nimport { isClassOrFunction } from './is-class-or-function';\nimport { isFunction } from './is-function';\nimport { isPlainObject } from './is-plain-object';\nimport { bindingScopeToInjectionScope } from './scope-converter';\n\nexport namespace ProviderTokenHelpers {\n export function isClassToken<T>(provider: ProviderToken<T>): provider is ProviderClassToken<T> {\n return hasProvideProperty(provider) && 'useClass' in provider;\n }\n\n export function isValueToken<T>(provider: ProviderToken<T>): provider is ProviderValueToken<T> {\n return hasProvideProperty(provider) && 'useValue' in provider;\n }\n\n export function isFactoryToken<T>(provider: ProviderToken<T>): provider is ProviderFactoryToken<T> {\n return hasProvideProperty(provider) && 'useFactory' in provider;\n }\n\n export function isProviderIdentifier<T = any>(value: any): value is ProviderIdentifier<T> {\n return typeof value === 'string' || typeof value === 'symbol' || isClassOrFunction(value);\n }\n\n export function toServiceIdentifier<T = any>(provider: ProviderToken<T>): ServiceIdentifier<T> {\n return isProviderIdentifier(provider) ? provider : provider.provide;\n }\n\n export function toServiceIdentifiers(providers: ProviderToken[]): ServiceIdentifier<unknown>[] {\n return providers.map((provider) => toServiceIdentifier(provider));\n }\n\n export function toDependencyProviderWithOptions<T extends DependencyProvider<any>>(\n original: T,\n // Can be used to override the options\n override?: Partial<T>\n ): T {\n if (isClass(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useClass: (override as any)?.useClass ?? original,\n };\n } else if (isFunction(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useFactory: (override as any)?.useFactory ?? original,\n };\n }\n\n return {\n ...original,\n ...override,\n };\n }\n\n /**\n * The priority order is as follows:\n * 1. From the `ProviderToken.scope`\n * 2. From the class `@Injectable(scope)` decorator\n * 3. From the `ProviderModule` default scope.\n *\n * @param provider The {@link ProviderToken}.\n * @param moduleDefaultScope The module default scope.\n */\n export function getInjectionScopeByPriority(\n provider: ProviderToken,\n moduleDefaultScope: InjectionScope\n ): InjectionScope {\n return tryGetScopeFromProvider(provider) ?? tryGetDecoratorScopeFromClass(provider) ?? moduleDefaultScope;\n }\n\n export function tryGetProviderOptions<T>(\n provider: ProviderToken<T>\n ): (ProviderOptions<T> & ProviderScopeOption) | undefined {\n if (!hasProvideProperty(provider)) return;\n\n return provider as any;\n }\n\n export function tryGetScopeFromProvider(provider: ProviderToken): InjectionScope | undefined {\n const providerOptions = tryGetProviderOptions(provider);\n if (!providerOptions) return;\n\n return providerOptions.scope;\n }\n\n export function tryGetDecoratorScopeFromClass<T = any>(provider: ProviderToken<T>): InjectionScope | undefined {\n const providerClass = toServiceIdentifier(provider);\n if (!isClass(providerClass)) return;\n\n const inversifyScope = getClassMetadata(providerClass as any)?.scope;\n if (!inversifyScope) return;\n\n return bindingScopeToInjectionScope(inversifyScope);\n }\n\n function hasProvideProperty(provider: any): provider is object {\n return isPlainObject(provider) && typeof provider === 'object' && 'provide' in provider;\n }\n}\n","export function isClass(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return Function.prototype.toString.call(v).startsWith('class ');\n}\n","import type { Class } from 'type-fest';\n\nexport function isClassOrFunction(value: any): value is Function | Class<any> {\n return typeof value === 'function';\n}\n","export function isFunction(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return !Function.prototype.toString.call(v).startsWith('class ');\n}\n","/*\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: any): o is object {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import type { DynamicExports, ProviderModuleOptions, ProviderModuleOptionsInternal, StaticExports } from '../types';\n\nexport namespace ProviderModuleHelpers {\n export function buildInternalConstructorParams(\n params: ProviderModuleOptions & ProviderModuleOptionsInternal\n ): ProviderModuleOptions {\n return params as ProviderModuleOptions;\n }\n\n export function isDynamicExport(exporter: StaticExports | DynamicExports): exporter is DynamicExports {\n return !Array.isArray(exporter) && typeof exporter === 'function';\n }\n}\n","import { inject as _inject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#inject} for more details. */\nexport function Inject(provider: ProviderToken) {\n return _inject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { multiInject as _multiInject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#multiinject} for more details. */\nexport function MultiInject(provider: ProviderToken) {\n return _multiInject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { injectFromBase as _injectFromBase } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectfrombase} for more details. */\nexport function InjectFromBase(options?: Parameters<typeof _injectFromBase>[0]) {\n return _injectFromBase(options);\n}\n","import { named as _named, type MetadataName } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#named} for more details. */\nexport function Named(name: MetadataName) {\n return _named(name);\n}\n","import { optional as _optional } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#optional} for more details. */\nexport function Optional() {\n return _optional();\n}\n","import { postConstruct as _postConstruct } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#postconstruct} for more details. */\nexport function PostConstruct() {\n return _postConstruct();\n}\n","import { preDestroy as _preDestroy } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#predestroy} for more details. */\nexport function PreDestroy() {\n return _preDestroy();\n}\n","import { tagged as _tagged, type MetadataTag } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#tagged} for more details. */\nexport function Tagged(key: MetadataTag, value: unknown) {\n return _tagged(key, value);\n}\n","import { unmanaged as _unmanaged } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#unmanaged} for more details. */\nexport function Unmanaged() {\n return _unmanaged();\n}\n","/** Exception which indicates that there is a generic error. */\nexport class InjectionError extends Error {\n override name = InjectionError.name;\n}\n","import type { IProviderModule } from '../types';\n\n/** Exception which indicates that there is a generic error with an instance of {@link IProviderModule}. */\nexport class InjectionProviderModuleError extends Error {\n override name = InjectionProviderModuleError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(`{ProviderModule.${module.toString()}} => ${message}`);\n }\n}\n","import { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an invokation of a disposed module. */\nexport class InjectionProviderModuleDisposedError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleDisposedError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'Has been disposed! You can re-initialize it by using the `_lazyInit` method.');\n }\n}\n","import type { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/**\n * Exception which indicates that an instance of {@link IProviderModule}\n * imports another module which dynamically exports its providers/modules and\n * is trying to dynamically export more or different providers/modules than the\n * ones declared into its static exports.\n */\nexport class InjectionDynamicExportsOutOfRange extends InjectionProviderModuleError {\n override name = InjectionDynamicExportsOutOfRange.name;\n\n constructor(module: IProviderModule) {\n super(\n module,\n `The 'ProviderModule.${module.toString()}' is trying to dynamically export providers/modules out of the declared range of the static exports!`\n );\n }\n}\n","import { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates that a module has been initialized without an `identifier`. */\nexport class InjectionProviderModuleMissingIdentifierError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleMissingIdentifierError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'An `identifier` must be supplied!');\n }\n}\n","import { Container } from 'inversify';\n\n/**\n * The low-level App Container.\n *\n * **Internally used, please use the `AppModule` to interact with it.**\n */\nexport const GlobalContainer = new Container({\n defaultScope: 'Singleton',\n});\n","import {\r\n Container,\r\n type BindingActivation,\r\n type BindingDeactivation,\r\n type BindToFluentSyntax,\r\n type GetOptions,\r\n type IsBoundOptions,\r\n} from 'inversify';\r\n\r\nimport { InjectionScope } from '../enums';\r\nimport {\r\n InjectionDynamicExportsOutOfRange,\r\n InjectionProviderModuleDisposedError,\r\n InjectionProviderModuleError,\r\n InjectionProviderModuleMissingIdentifierError,\r\n} from '../errors';\r\nimport { injectionScopeToBindingScope, isPlainObject, ProviderModuleHelpers, ProviderTokenHelpers } from '../helpers';\r\nimport type {\r\n CloneParams,\r\n DependencyProvider,\r\n IProviderModule,\r\n IProviderModuleNaked,\r\n LazyInitOptions,\r\n ProviderModuleGetManyParam,\r\n ProviderModuleGetManySignature,\r\n ProviderModuleOptions,\r\n ProviderModuleOptionsInternal,\r\n ProviderToken,\r\n RegisteredBindingSideEffects,\r\n StaticExports,\r\n} from '../types';\r\nimport { ProviderModuleUtils } from '../utils';\r\nimport { GlobalContainer } from './global-container';\r\n\r\n/**\r\n * Modules are highly recommended as an effective way to organize your components.\r\n * For most applications, you'll likely have multiple modules, each encapsulating a closely related set of capabilities.\r\n *\r\n * _See {@link ProviderModuleOptions | ProviderModuleOptions}_.\r\n *\r\n * @example\r\n * ```ts\r\n * const EngineModule = new ProviderModule({\r\n * identifier: Symbol('EngineModule'),\r\n * providers: [EngineService],\r\n * exports: [EngineService]\r\n * });\r\n *\r\n * const DashboardModule = new ProviderModule({\r\n * identifier: Symbol('DashboardModule'),\r\n * providers: [DashboardService],\r\n * exports: [DashboardService]\r\n * });\r\n *\r\n * const CarModule = new ProviderModule({\r\n * identifier: Symbol('CarModule'),\r\n * imports: [EngineModule, DashboardModule],\r\n * providers: [CarService],\r\n * exports: [CarService]\r\n * });\r\n *\r\n * // Run-time class replacement:\r\n * const RedCarModule = new ProviderModule({\r\n * identifier: Symbol('RedCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useClass: RedCarService,\r\n * }\r\n * ],\r\n * });\r\n *\r\n * // Run-time factory example:\r\n * const BlackCarModule = new ProviderModule({\r\n * identifier: Symbol('BlackCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useFactory: (carService: CarService) => {\r\n * carService.setColor('black');\r\n *\r\n * return carService;\r\n * },\r\n * inject: [CarService]\r\n * }\r\n * ],\r\n * });\r\n * ```\r\n */\r\nexport class ProviderModule implements IProviderModule {\r\n readonly identifier: symbol;\r\n readonly isDisposed: boolean = false;\r\n\r\n protected readonly isAppModule: boolean;\r\n protected readonly container!: Container;\r\n protected readonly defaultScope!: IProviderModuleNaked['defaultScope'];\r\n protected readonly dynamicExports: IProviderModuleNaked['dynamicExports'];\r\n protected readonly onReady: IProviderModuleNaked['onReady'];\r\n protected readonly onDispose: IProviderModuleNaked['onDispose'];\r\n protected readonly importedProvidersMap: IProviderModuleNaked['importedProvidersMap'];\r\n protected readonly moduleUtils!: IProviderModuleNaked['moduleUtils'];\r\n protected readonly imports!: IProviderModuleNaked['imports'];\r\n protected readonly providers!: IProviderModuleNaked['providers'];\r\n protected readonly importedProviders!: IProviderModuleNaked['importedProviders'];\r\n protected readonly exports!: IProviderModuleNaked['exports'];\r\n\r\n private readonly registeredBindingSideEffects!: RegisteredBindingSideEffects;\r\n\r\n constructor({\r\n identifier,\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: ProviderModuleOptions) {\r\n const internalParams = _internalParams as ProviderModuleOptionsInternal;\r\n\r\n // The module id once set should never be changed!\r\n this.identifier = this.setIdentifier(identifier);\r\n this.isDisposed = internalParams.isDisposed ?? false;\r\n // Same goes for the `isAppModule`.\r\n this.isAppModule = internalParams.isAppModule ?? false;\r\n\r\n // If this module is the `AppModule`,\r\n // the initialization will be done when the `IProviderModuleNaked._lazyInit` method is invoked.\r\n if (this.isAppModule) return;\r\n\r\n this._lazyInit({\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams,\r\n });\r\n }\r\n\r\n get<T>(provider: ProviderToken<T>, isOptional?: boolean): T {\r\n return this.__get(provider, { optional: isOptional ?? false });\r\n }\r\n\r\n getMany<D extends (ProviderModuleGetManyParam<any> | ProviderToken)[]>(\r\n ...deps: D | unknown[]\r\n ): ProviderModuleGetManySignature<D> {\r\n return (deps as D).map((dep) => {\r\n const withOptions = isPlainObject(dep) && 'provider' in dep;\r\n\r\n return this.get(withOptions ? dep.provider : dep, withOptions ? dep.isOptional : false);\r\n }) as any;\r\n }\r\n\r\n onActivationEvent<T>(provider: ProviderToken<T>, cb: BindingActivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onActivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n onDeactivationEvent<T>(provider: ProviderToken<T>, cb: BindingDeactivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onDeactivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n toNaked(): IProviderModuleNaked {\r\n return this as any;\r\n }\r\n\r\n clone(options?: CloneParams): IProviderModule {\r\n let providers = [...this.providers];\r\n\r\n if (options?.providersMap) {\r\n providers = providers.map((provider) => options.providersMap!(provider, this));\r\n }\r\n\r\n return new ProviderModule(\r\n ProviderModuleHelpers.buildInternalConstructorParams({\r\n isAppModule: this.isAppModule,\r\n identifier: this.identifier,\r\n defaultScope: this.defaultScope.native,\r\n dynamicExports: this.dynamicExports,\r\n onReady: this.onReady,\r\n onDispose: this.onDispose,\r\n importedProvidersMap: options?.importedProvidersMap,\r\n imports: [...this.imports],\r\n providers,\r\n exports: [...this.exports],\r\n })\r\n );\r\n }\r\n\r\n toString(): string {\r\n return this.identifier?.description ?? 'Unknown';\r\n }\r\n\r\n private setIdentifier(identifier: symbol): symbol {\r\n if (!identifier) throw new InjectionProviderModuleMissingIdentifierError(this);\r\n\r\n return identifier;\r\n }\r\n\r\n private prepareContainer(params: ProviderModuleOptionsInternal): Container {\r\n if (this.isAppModule) {\r\n return params.container?.() ?? GlobalContainer;\r\n } else if (params.container) {\r\n console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`);\r\n\r\n return params.container();\r\n } else {\r\n return new Container({\r\n parent: GlobalContainer,\r\n defaultScope: this.defaultScope.inversify,\r\n });\r\n }\r\n }\r\n\r\n private injectImportedModules(modules?: IProviderModuleNaked[]): void {\r\n if (!modules || modules.length === 0) return;\r\n\r\n modules.forEach((module) => {\r\n if (module.toString() === 'GlobalAppModule') {\r\n throw new InjectionProviderModuleError(this, `The 'GlobalAppModule' can't be imported!`);\r\n }\r\n\r\n const moduleStaticExports = module._getExportableModulesAndProviders();\r\n const moduleDynamicExports = module.dynamicExports?.(this, moduleStaticExports);\r\n const moduleHasDynamicExports = moduleDynamicExports !== undefined;\r\n\r\n if (moduleHasDynamicExports) {\r\n this.shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module,\r\n moduleStaticExports,\r\n moduleDynamicExports\r\n );\r\n }\r\n\r\n (moduleDynamicExports ?? moduleStaticExports).forEach((exportable) => {\r\n if (exportable instanceof ProviderModule) {\r\n const exportableModule = exportable.toNaked();\r\n\r\n // The current item of the `exports` array is actually\r\n // another ProviderModule, therefore we must recursively drill into it\r\n // to import its exported modules/providers.\r\n this.injectImportedModules([exportableModule]);\r\n\r\n return;\r\n }\r\n\r\n const provider = exportable as DependencyProvider;\r\n const importedProvider = this.importedProvidersMap!(\r\n {\r\n scope: ProviderTokenHelpers.getInjectionScopeByPriority(provider, module.defaultScope.native),\r\n provide: ProviderTokenHelpers.toServiceIdentifier(provider),\r\n useFactory: () => module.get(provider),\r\n // As we are using a factory token, there is no need to include the `onEvent` and `when` properties\r\n // into the processed `ProviderToken` created for this imported provider,\r\n // because the `importedModule.get` invokation will\r\n // fire the `onEvent` and `when` properties of the original imported provider.\r\n },\r\n provider,\r\n module\r\n );\r\n\r\n this.importedProviders.set(module, [...(this.importedProviders.get(module) ?? []), importedProvider]);\r\n\r\n this.moduleUtils.bindToContainer(importedProvider, module.defaultScope.native);\r\n\r\n // Let's make sure that when the parent module unbinds the provider\r\n // this module unbinds it aswell.\r\n module._onUnbind(provider, () => this.__unbind(importedProvider));\r\n });\r\n });\r\n }\r\n\r\n private injectProviders(): void {\r\n this.providers.forEach((provider) => this.moduleUtils.bindToContainer(provider, this.defaultScope.native));\r\n }\r\n\r\n private registerBindingSideEffect(\r\n provider: ProviderToken,\r\n on: 'bind' | 'rebind' | 'unbind',\r\n cb: () => Promise<void> | void\r\n ): void {\r\n if (!this.registeredBindingSideEffects.has(provider)) {\r\n this.registeredBindingSideEffects.set(provider, {\r\n onBindEffects: [],\r\n onRebindEffects: [],\r\n onUnbindEffects: [],\r\n });\r\n }\r\n\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider)!;\r\n\r\n if (on === 'bind') {\r\n providerBindingSideEffects.onBindEffects.push(cb);\r\n } else if (on === 'rebind') {\r\n providerBindingSideEffects.onRebindEffects.push(cb);\r\n } else {\r\n providerBindingSideEffects.onUnbindEffects.push(cb);\r\n }\r\n }\r\n\r\n private invokeRegisteredBindingSideEffects(provider: ProviderToken, event: 'onBind' | 'onRebind' | 'onUnbind'): void {\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider);\r\n /* istanbul ignore next */\r\n if (!providerBindingSideEffects) return;\r\n\r\n providerBindingSideEffects[`${event}Effects`].forEach((cb) => cb());\r\n }\r\n\r\n private removeRegisteredBindingSideEffects(provider: ProviderToken | 'all'): void {\r\n /* istanbul ignore next */\r\n if (!this.registeredBindingSideEffects) return;\r\n\r\n if (provider === 'all') {\r\n this.registeredBindingSideEffects.forEach(({ onUnbindEffects }) => onUnbindEffects.forEach((cb) => cb()));\r\n\r\n return;\r\n }\r\n\r\n if (!this.registeredBindingSideEffects.has(provider)) return;\r\n\r\n this.registeredBindingSideEffects.get(provider)?.onUnbindEffects.forEach((cb) => cb());\r\n this.registeredBindingSideEffects.delete(provider);\r\n }\r\n\r\n private shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module: IProviderModuleNaked,\r\n staticExports: StaticExports,\r\n dynamicExports: StaticExports\r\n ): void {\r\n if (\r\n dynamicExports.length > staticExports.length ||\r\n dynamicExports.some((dynamicExport) => !staticExports.includes(dynamicExport))\r\n ) {\r\n throw new InjectionDynamicExportsOutOfRange(module);\r\n }\r\n }\r\n\r\n private shouldThrowIfDisposed(): void {\r\n if (this.container !== null) return;\r\n\r\n throw new InjectionProviderModuleDisposedError(this);\r\n }\r\n\r\n //#region IProviderModuleNaked methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._dispose}.\r\n */\r\n protected async _dispose(): Promise<void> {\r\n await this.onDispose?.(this);\r\n await this.__unbindAll();\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = null;\r\n //@ts-expect-error Read-only property.\r\n this.imports = null;\r\n //@ts-expect-error Read-only property.\r\n this.providers = null;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = null;\r\n //@ts-expect-error Read-only property.\r\n this.exports = null;\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = null;\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = null;\r\n\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = true;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._lazyInit}.\r\n */\r\n protected _lazyInit({\r\n imports = [],\r\n providers = [],\r\n exports = [],\r\n defaultScope = InjectionScope.Singleton,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: LazyInitOptions): IProviderModule {\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = false;\r\n //@ts-expect-error Read-only property.\r\n this.imports = imports;\r\n //@ts-expect-error Read-only property.\r\n this.providers = providers;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = _internalParams.importedProviders ?? new Map();\r\n //@ts-expect-error Read-only property.\r\n this.exports = exports;\r\n //@ts-expect-error Read-only property.\r\n this.defaultScope = { native: defaultScope, inversify: injectionScopeToBindingScope(defaultScope) };\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = dynamicExports;\r\n //@ts-expect-error Read-only property.\r\n this.onReady = onReady;\r\n //@ts-expect-error Read-only property.\r\n this.onDispose = onDispose;\r\n //@ts-expect-error Read-only propery.\r\n this.importedProvidersMap = _internalParams.importedProvidersMap ?? ((provider) => provider);\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = this.prepareContainer({ ..._internalParams });\r\n //@ts-expect-error Read-only property.\r\n this.moduleUtils = new ProviderModuleUtils(this);\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = new Map();\r\n\r\n this.injectImportedModules(this._getImportedModules());\r\n this.injectProviders();\r\n\r\n this.onReady?.(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getImportedModules}.\r\n */\r\n protected _getImportedModules(): IProviderModuleNaked[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.imports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getProviders}.\r\n */\r\n protected _getProviders(): DependencyProvider[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.providers;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getExportableModulesAndProviders}.\r\n */\r\n protected _getExportableModulesAndProviders(): StaticExports {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.exports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onBind}.\r\n */\r\n protected _onBind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'bind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onRebind}.\r\n */\r\n protected _onRebind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'rebind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onUnbind}.\r\n */\r\n protected _onUnbind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'unbind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._overwriteContainer}.\r\n */\r\n protected _overwriteContainer(cb: () => Container): void {\r\n //@ts-expect-error Read-only property.\r\n this.container = cb();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region InversifyJS Container native methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__bind}.\r\n */\r\n /* istanbul ignore next */\r\n protected __bind<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onBind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__get}.\r\n */\r\n /* istanbul ignore next */\r\n protected __get<T>(provider: ProviderToken<T>, options?: GetOptions): T {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.get(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected __getAll<T>(provider: ProviderToken<T>, options?: GetOptions): T[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAll(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAllAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAllAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T[]> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAllAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isCurrentBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isCurrentBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isCurrentBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__takeSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __takeSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.snapshot();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__restoreSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __restoreSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.restore();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __rebind<T>(provider: ProviderToken<T>): Promise<BindToFluentSyntax<T>> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = await this.container.rebind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __rebindSync<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.rebindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbind(provider: ProviderToken): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __unbindSync(provider: ProviderToken): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.unbindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbindAll(): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbindAll();\r\n\r\n this.removeRegisteredBindingSideEffects('all');\r\n }\r\n\r\n //#endregion\r\n}\r\n","import type { BindInWhenOnFluentSyntax, BindOnFluentSyntax, BindWhenOnFluentSyntax, Container } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\n\n/**\n * Class containing an internal set of `utils`.\n *\n * Each {@link IProviderModuleNaked.moduleUtils | ProviderModule} instance has its own {@link ProviderModuleUtils} property instance.\n */\nexport class ProviderModuleUtils {\n /** The low-level InversifyJS {@link Container} owned by {@link ProviderModuleUtils.module | module}. */\n get container(): Container {\n return this.moduleNaked.container;\n }\n\n /** The parent {@link IProviderModule | ProviderModule} of `this` instance. */\n readonly module: IProviderModule;\n readonly moduleNaked: IProviderModuleNaked;\n\n constructor(module: IProviderModule) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n }\n\n /**\n * Low-level method which can be used to manually register _(bind)_ a new {@link provider} into the {@link ProviderModuleUtils.module | module} container.\n *\n * **Note:** _You shouldn't directly use this to register providers as they will not appear_\n * _into the module's `imports` and `exports` arrays! Therefore leading to unexpected bugs and confusion!_\n *\n * @param provider The {@link ProviderToken | provider} to register.\n * @param defaultScope Optionally provide the default {@link InjectionScope} to use when applicable.\n * @returns `true` when the {@link provider} has been bound otherwhise `false`.\n */\n bindToContainer<T>(provider: DependencyProvider<T>, defaultScope: InjectionScope): boolean {\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) {\n return this.bindSelfTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isClassToken(provider)) {\n return this.bindClassTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isValueToken(provider)) {\n return this.bindValueTokenToContainer(provider);\n } else if (ProviderTokenHelpers.isFactoryToken(provider)) {\n return this.bindFactoryTokenToContainer(provider, defaultScope);\n }\n\n return false;\n }\n\n private bindSelfTokenToContainer<T>(provider: ProviderIdentifier<T>, defaultScope: InjectionScope): boolean {\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toSelf(),\n defaultScope\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindClassTokenToContainer<T>(provider: ProviderClassToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).to(provider.useClass),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindValueTokenToContainer<T>(provider: ProviderValueToken<T>): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toConstantValue(provider.useValue)\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindFactoryTokenToContainer<T>(provider: ProviderFactoryToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container\n .bind(ProviderTokenHelpers.toServiceIdentifier(provider))\n .toResolvedValue(provider.useFactory, ProviderTokenHelpers.toServiceIdentifiers(provider.inject ?? [])),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n /** Sets the {@link InjectionScope} of a bound {@link provider}. */\n private setBindingScope<T>(\n provider: ProviderToken<T>,\n binding: BindInWhenOnFluentSyntax<T>,\n defaultScope: InjectionScope\n ): BindWhenOnFluentSyntax<T> {\n // A constant token will always be a singleton.\n if (ProviderTokenHelpers.isValueToken(provider)) return binding;\n\n const injectionScope = ProviderTokenHelpers.getInjectionScopeByPriority(provider, defaultScope);\n\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return binding.inSingletonScope();\n case InjectionScope.Transient:\n return binding.inTransientScope();\n case InjectionScope.Request:\n return binding.inRequestScope();\n }\n }\n\n /** Sets the `when` clause of a bound {@link provider}. */\n private setWhenBinding<T>(\n provider: ProviderToken<T>,\n binding: BindWhenOnFluentSyntax<T>\n ): BindOnFluentSyntax<unknown> {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return binding;\n\n const when = (provider as ProviderOptions<unknown>).when;\n if (!when) return binding;\n\n return binding.when(when);\n }\n\n /** Sets the `activation` and `deactivation` events of a bound {@link provider}. */\n private setBindingOnEvent(provider: ProviderToken, binding: BindOnFluentSyntax<any>): void {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return;\n\n const opts = provider as ProviderOptions<unknown>;\n\n if (opts.onEvent?.activation) {\n binding.onActivation(opts.onEvent.activation);\n }\n\n if (opts.onEvent?.deactivation) {\n binding.onDeactivation(opts.onEvent.deactivation);\n }\n }\n}\n","import { InjectionError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { ProviderModule } from './provider-module';\n\n/**\n * Class of the {@link AppModule} instance.\n *\n * **You shouldn't initialize a new instance of this class, please use the {@link AppModule} instance!**\n */\nexport class GlobalAppModule extends ProviderModule implements IAppModule {\n private nakedModule = this as unknown as IProviderModuleNaked;\n private isLoaded = false;\n\n constructor() {\n super(\n ProviderModuleHelpers.buildInternalConstructorParams({\n identifier: Symbol(GLOBAL_APP_MODULE_ID),\n isAppModule: true,\n })\n );\n }\n\n register<AsNaked extends boolean = false>(\n options: AppModuleOptions\n ): AsNaked extends false ? IAppModule : IAppModule & IProviderModuleNaked {\n if (this.isLoaded) {\n throw new InjectionError(`The '${this.toString()}' has already been registered!`);\n }\n\n this.nakedModule._lazyInit(options);\n\n this.isLoaded = true;\n\n return this as any;\n }\n\n /* istanbul ignore next */\n override toNaked(): IAppModule & IProviderModuleNaked {\n return super.toNaked() as any;\n }\n\n protected override async _dispose(): Promise<void> {\n this.isLoaded = false;\n\n super._dispose();\n }\n}\n\n/**\n * Special instance of {@link ProviderModule} which acts as the global module of your application in which you can inject any provider\n * which must be available through your entire application.\n *\n * The registered providers will automatically be available inside all the modules.\n *\n * @example\n * ```ts\n * // The `register` method must be invoked only once during your application life cycle!\n * AppModule.register({\n * imports: [ConfigModule, ApiModule, UserModule, DatabaseModule],\n * providers: [DummyService],\n * });\n * ```\n */\nexport const AppModule = new GlobalAppModule();\n"],"mappings":"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","names":["GLOBAL_APP_MODULE_ID","InjectionScope","injectionScopeToBindingScope","injectionScope","InjectionScope","Singleton","Transient","Request","bindingScopeToInjectionScope","bindingScope","isClass","v","Function","prototype","toString","call","startsWith","isClassOrFunction","value","isFunction","v","Function","prototype","toString","call","startsWith","isObject","o","Object","prototype","toString","call","isPlainObject","ctor","constructor","undefined","prot","hasOwnProperty","ProviderTokenHelpers","isClassToken","provider","hasProvideProperty","isValueToken","isFactoryToken","isProviderIdentifier","value","isClassOrFunction","toServiceIdentifier","provide","toServiceIdentifiers","providers","map","toDependencyProviderWithOptions","original","override","isClass","useClass","isFunction","useFactory","getInjectionScopeByPriority","moduleDefaultScope","tryGetScopeFromProvider","tryGetDecoratorScopeFromClass","tryGetProviderOptions","providerOptions","scope","providerClass","inversifyScope","getClassMetadata","bindingScopeToInjectionScope","isPlainObject","ProviderModuleHelpers","buildInternalConstructorParams","params","isDynamicExport","exporter","Array","isArray","Injectable","scope","undefined","_injectable","injectionScopeToBindingScope","import_inversify","Inject","provider","_inject","ProviderTokenHelpers","toServiceIdentifier","import_inversify","MultiInject","provider","_multiInject","ProviderTokenHelpers","toServiceIdentifier","import_inversify","InjectFromBase","options","_injectFromBase","import_inversify","Named","name","_named","import_inversify","Optional","_optional","import_inversify","PostConstruct","_postConstruct","import_inversify","PreDestroy","_preDestroy","import_inversify","Tagged","key","value","_tagged","import_inversify","Unmanaged","_unmanaged","InjectionError","Error","name","InjectionProviderModuleError","Error","name","constructor","module","message","toString","InjectionProviderModuleDisposedError","InjectionProviderModuleError","name","constructor","module","InjectionDynamicExportsOutOfRange","InjectionProviderModuleError","name","constructor","module","toString","InjectionProviderModuleMissingIdentifierError","InjectionProviderModuleError","name","constructor","module","import_inversify","GlobalContainer","Container","defaultScope","import_inversify","ProviderModuleUtils","container","moduleNaked","module","constructor","toNaked","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","setBindingScope","bind","toServiceIdentifier","toSelf","__isCurrentBound","setBindingOnEvent","setWhenBinding","to","useClass","toConstantValue","useValue","toResolvedValue","useFactory","toServiceIdentifiers","inject","binding","injectionScope","getInjectionScopeByPriority","InjectionScope","Singleton","inSingletonScope","Transient","inTransientScope","Request","inRequestScope","when","opts","onEvent","activation","onActivation","deactivation","onDeactivation","ProviderModule","identifier","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","_internalParams","internalParams","setIdentifier","_lazyInit","get","provider","isOptional","__get","optional","getMany","deps","map","dep","withOptions","isPlainObject","onActivationEvent","cb","shouldThrowIfDisposed","onActivation","ProviderTokenHelpers","toServiceIdentifier","onDeactivationEvent","onDeactivation","toNaked","clone","options","providersMap","ProviderModuleHelpers","buildInternalConstructorParams","native","toString","description","InjectionProviderModuleMissingIdentifierError","prepareContainer","params","GlobalContainer","console","warn","Container","parent","inversify","injectImportedModules","modules","length","forEach","module","InjectionProviderModuleError","moduleStaticExports","_getExportableModulesAndProviders","moduleDynamicExports","moduleHasDynamicExports","undefined","shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports","exportable","exportableModule","importedProvider","scope","getInjectionScopeByPriority","provide","useFactory","set","bindToContainer","_onUnbind","__unbind","injectProviders","registerBindingSideEffect","on","has","onBindEffects","onRebindEffects","onUnbindEffects","providerBindingSideEffects","push","invokeRegisteredBindingSideEffects","event","removeRegisteredBindingSideEffects","delete","staticExports","some","dynamicExport","includes","InjectionDynamicExportsOutOfRange","InjectionProviderModuleDisposedError","_dispose","__unbindAll","InjectionScope","Singleton","Map","injectionScopeToBindingScope","ProviderModuleUtils","_getImportedModules","_getProviders","_onBind","_onRebind","_overwriteContainer","__bind","binding","bind","__getAsync","getAsync","__getAll","getAll","__getAllAsync","getAllAsync","__isBound","isBound","__isCurrentBound","isCurrentBound","__takeSnapshot","snapshot","__restoreSnapshot","restore","__rebind","rebind","__rebindSync","rebindSync","unbind","__unbindSync","unbindSync","unbindAll","GlobalAppModule","ProviderModule","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","InjectionError","toString","_lazyInit","toNaked","_dispose","AppModule"]}
package/dist/index.d.cts CHANGED
@@ -514,9 +514,7 @@ interface CloneParams {
514
514
  /** The current {@link DependencyProvider | provider}. */
515
515
  provider: DependencyProvider<any>,
516
516
  /** The {@link IProviderModule | module} from where the {@link DependencyProvider | provider} originated. */
517
- module: IProviderModule,
518
- /** Flag indicating if the {@link provider} has been imported from the {@link module}. */
519
- isImported: boolean) => DependencyProvider<any>;
517
+ module: IProviderModule) => DependencyProvider<any>;
520
518
  /** Can be used to override all the _imported_ providers _before_ the binding process. */
521
519
  importedProvidersMap?: ProviderModuleOptionsInternal['importedProvidersMap'];
522
520
  }
@@ -556,18 +554,18 @@ declare function Tagged(key: MetadataTag, value: unknown): MethodDecorator & Par
556
554
  declare function Unmanaged(): MethodDecorator & ParameterDecorator & PropertyDecorator;
557
555
 
558
556
  /** Exception which indicates that there is a generic error. */
559
- declare class XInjectionError extends Error {
557
+ declare class InjectionError extends Error {
560
558
  name: string;
561
559
  }
562
560
 
563
561
  /** Exception which indicates that there is a generic error with an instance of {@link IProviderModule}. */
564
- declare class XInjectionProviderModuleError extends Error {
562
+ declare class InjectionProviderModuleError extends Error {
565
563
  name: string;
566
564
  constructor(module: IProviderModule, message: string);
567
565
  }
568
566
 
569
567
  /** Exception which indicates an invokation of a disposed module. */
570
- declare class XInjectionProviderModuleDisposedError extends XInjectionProviderModuleError {
568
+ declare class InjectionProviderModuleDisposedError extends InjectionProviderModuleError {
571
569
  name: string;
572
570
  constructor(module: IProviderModule);
573
571
  }
@@ -578,13 +576,13 @@ declare class XInjectionProviderModuleDisposedError extends XInjectionProviderMo
578
576
  * is trying to dynamically export more or different providers/modules than the
579
577
  * ones declared into its static exports.
580
578
  */
581
- declare class XInjectionDynamicExportsOutOfRange extends XInjectionProviderModuleError {
579
+ declare class InjectionDynamicExportsOutOfRange extends InjectionProviderModuleError {
582
580
  name: string;
583
581
  constructor(module: IProviderModule);
584
582
  }
585
583
 
586
584
  /** Exception which indicates that a module has been initialized without an `identifier`. */
587
- declare class XInjectionProviderModuleMissingIdentifierError extends XInjectionProviderModuleError {
585
+ declare class InjectionProviderModuleMissingIdentifierError extends InjectionProviderModuleError {
588
586
  name: string;
589
587
  constructor(module: IProviderModule);
590
588
  }
@@ -643,8 +641,6 @@ declare const GlobalContainer: Container;
643
641
  *
644
642
  * @example
645
643
  * ```ts
646
- * import { ProviderModule } from '@adimm/x-injection';
647
- *
648
644
  * const EngineModule = new ProviderModule({
649
645
  * identifier: Symbol('EngineModule'),
650
646
  * providers: [EngineService],
@@ -888,8 +884,6 @@ declare class GlobalAppModule extends ProviderModule implements IAppModule {
888
884
  *
889
885
  * @example
890
886
  * ```ts
891
- * import { AppModule } from '@adimm/x-injection';
892
- *
893
887
  * // The `register` method must be invoked only once during your application life cycle!
894
888
  * AppModule.register({
895
889
  * imports: [ConfigModule, ApiModule, UserModule, DatabaseModule],
@@ -899,4 +893,4 @@ declare class GlobalAppModule extends ProviderModule implements IAppModule {
899
893
  */
900
894
  declare const AppModule: GlobalAppModule;
901
895
 
902
- export { AppModule, type AppModuleOptions, type CloneParams, type DependencyProvider, type DynamicExports, GLOBAL_APP_MODULE_ID, GlobalAppModule, GlobalContainer, type IAppModule, type IProviderModule, type IProviderModuleNaked, Inject, InjectFromBase, Injectable, InjectionScope, type LazyInitOptions, MultiInject, Named, type OnEvent, Optional, PostConstruct, PreDestroy, type ProviderClassToken, type ProviderFactoryToken, type ProviderIdentifier, ProviderModule, type ProviderModuleGetManyParam, type ProviderModuleGetManySignature, ProviderModuleHelpers, type ProviderModuleOptions, type ProviderModuleOptionsInternal, type ProviderOptions, type ProviderScopeOption, type ProviderToken, ProviderTokenHelpers, type ProviderValueToken, type StaticExports, Tagged, Unmanaged, XInjectionDynamicExportsOutOfRange, XInjectionError, XInjectionProviderModuleDisposedError, XInjectionProviderModuleError, XInjectionProviderModuleMissingIdentifierError, bindingScopeToInjectionScope, injectionScopeToBindingScope, isClass, isClassOrFunction, isFunction, isPlainObject };
896
+ export { AppModule, type AppModuleOptions, type CloneParams, type DependencyProvider, type DynamicExports, GLOBAL_APP_MODULE_ID, GlobalAppModule, GlobalContainer, type IAppModule, type IProviderModule, type IProviderModuleNaked, Inject, InjectFromBase, Injectable, InjectionDynamicExportsOutOfRange, InjectionError, InjectionProviderModuleDisposedError, InjectionProviderModuleError, InjectionProviderModuleMissingIdentifierError, InjectionScope, type LazyInitOptions, MultiInject, Named, type OnEvent, Optional, PostConstruct, PreDestroy, type ProviderClassToken, type ProviderFactoryToken, type ProviderIdentifier, ProviderModule, type ProviderModuleGetManyParam, type ProviderModuleGetManySignature, ProviderModuleHelpers, type ProviderModuleOptions, type ProviderModuleOptionsInternal, type ProviderOptions, type ProviderScopeOption, type ProviderToken, ProviderTokenHelpers, type ProviderValueToken, type StaticExports, Tagged, Unmanaged, bindingScopeToInjectionScope, injectionScopeToBindingScope, isClass, isClassOrFunction, isFunction, isPlainObject };
package/dist/index.d.ts CHANGED
@@ -514,9 +514,7 @@ interface CloneParams {
514
514
  /** The current {@link DependencyProvider | provider}. */
515
515
  provider: DependencyProvider<any>,
516
516
  /** The {@link IProviderModule | module} from where the {@link DependencyProvider | provider} originated. */
517
- module: IProviderModule,
518
- /** Flag indicating if the {@link provider} has been imported from the {@link module}. */
519
- isImported: boolean) => DependencyProvider<any>;
517
+ module: IProviderModule) => DependencyProvider<any>;
520
518
  /** Can be used to override all the _imported_ providers _before_ the binding process. */
521
519
  importedProvidersMap?: ProviderModuleOptionsInternal['importedProvidersMap'];
522
520
  }
@@ -556,18 +554,18 @@ declare function Tagged(key: MetadataTag, value: unknown): MethodDecorator & Par
556
554
  declare function Unmanaged(): MethodDecorator & ParameterDecorator & PropertyDecorator;
557
555
 
558
556
  /** Exception which indicates that there is a generic error. */
559
- declare class XInjectionError extends Error {
557
+ declare class InjectionError extends Error {
560
558
  name: string;
561
559
  }
562
560
 
563
561
  /** Exception which indicates that there is a generic error with an instance of {@link IProviderModule}. */
564
- declare class XInjectionProviderModuleError extends Error {
562
+ declare class InjectionProviderModuleError extends Error {
565
563
  name: string;
566
564
  constructor(module: IProviderModule, message: string);
567
565
  }
568
566
 
569
567
  /** Exception which indicates an invokation of a disposed module. */
570
- declare class XInjectionProviderModuleDisposedError extends XInjectionProviderModuleError {
568
+ declare class InjectionProviderModuleDisposedError extends InjectionProviderModuleError {
571
569
  name: string;
572
570
  constructor(module: IProviderModule);
573
571
  }
@@ -578,13 +576,13 @@ declare class XInjectionProviderModuleDisposedError extends XInjectionProviderMo
578
576
  * is trying to dynamically export more or different providers/modules than the
579
577
  * ones declared into its static exports.
580
578
  */
581
- declare class XInjectionDynamicExportsOutOfRange extends XInjectionProviderModuleError {
579
+ declare class InjectionDynamicExportsOutOfRange extends InjectionProviderModuleError {
582
580
  name: string;
583
581
  constructor(module: IProviderModule);
584
582
  }
585
583
 
586
584
  /** Exception which indicates that a module has been initialized without an `identifier`. */
587
- declare class XInjectionProviderModuleMissingIdentifierError extends XInjectionProviderModuleError {
585
+ declare class InjectionProviderModuleMissingIdentifierError extends InjectionProviderModuleError {
588
586
  name: string;
589
587
  constructor(module: IProviderModule);
590
588
  }
@@ -643,8 +641,6 @@ declare const GlobalContainer: Container;
643
641
  *
644
642
  * @example
645
643
  * ```ts
646
- * import { ProviderModule } from '@adimm/x-injection';
647
- *
648
644
  * const EngineModule = new ProviderModule({
649
645
  * identifier: Symbol('EngineModule'),
650
646
  * providers: [EngineService],
@@ -888,8 +884,6 @@ declare class GlobalAppModule extends ProviderModule implements IAppModule {
888
884
  *
889
885
  * @example
890
886
  * ```ts
891
- * import { AppModule } from '@adimm/x-injection';
892
- *
893
887
  * // The `register` method must be invoked only once during your application life cycle!
894
888
  * AppModule.register({
895
889
  * imports: [ConfigModule, ApiModule, UserModule, DatabaseModule],
@@ -899,4 +893,4 @@ declare class GlobalAppModule extends ProviderModule implements IAppModule {
899
893
  */
900
894
  declare const AppModule: GlobalAppModule;
901
895
 
902
- export { AppModule, type AppModuleOptions, type CloneParams, type DependencyProvider, type DynamicExports, GLOBAL_APP_MODULE_ID, GlobalAppModule, GlobalContainer, type IAppModule, type IProviderModule, type IProviderModuleNaked, Inject, InjectFromBase, Injectable, InjectionScope, type LazyInitOptions, MultiInject, Named, type OnEvent, Optional, PostConstruct, PreDestroy, type ProviderClassToken, type ProviderFactoryToken, type ProviderIdentifier, ProviderModule, type ProviderModuleGetManyParam, type ProviderModuleGetManySignature, ProviderModuleHelpers, type ProviderModuleOptions, type ProviderModuleOptionsInternal, type ProviderOptions, type ProviderScopeOption, type ProviderToken, ProviderTokenHelpers, type ProviderValueToken, type StaticExports, Tagged, Unmanaged, XInjectionDynamicExportsOutOfRange, XInjectionError, XInjectionProviderModuleDisposedError, XInjectionProviderModuleError, XInjectionProviderModuleMissingIdentifierError, bindingScopeToInjectionScope, injectionScopeToBindingScope, isClass, isClassOrFunction, isFunction, isPlainObject };
896
+ export { AppModule, type AppModuleOptions, type CloneParams, type DependencyProvider, type DynamicExports, GLOBAL_APP_MODULE_ID, GlobalAppModule, GlobalContainer, type IAppModule, type IProviderModule, type IProviderModuleNaked, Inject, InjectFromBase, Injectable, InjectionDynamicExportsOutOfRange, InjectionError, InjectionProviderModuleDisposedError, InjectionProviderModuleError, InjectionProviderModuleMissingIdentifierError, InjectionScope, type LazyInitOptions, MultiInject, Named, type OnEvent, Optional, PostConstruct, PreDestroy, type ProviderClassToken, type ProviderFactoryToken, type ProviderIdentifier, ProviderModule, type ProviderModuleGetManyParam, type ProviderModuleGetManySignature, ProviderModuleHelpers, type ProviderModuleOptions, type ProviderModuleOptionsInternal, type ProviderOptions, type ProviderScopeOption, type ProviderToken, ProviderTokenHelpers, type ProviderValueToken, type StaticExports, Tagged, Unmanaged, bindingScopeToInjectionScope, injectionScopeToBindingScope, isClass, isClassOrFunction, isFunction, isPlainObject };
package/dist/index.js CHANGED
@@ -213,12 +213,12 @@ i(j, "Unmanaged");
213
213
 
214
214
  var A = class e extends Error {
215
215
  static {
216
- i(this, "XInjectionError");
216
+ i(this, "InjectionError");
217
217
  }
218
218
  name=e.name;
219
219
  }, R = class e extends Error {
220
220
  static {
221
- i(this, "XInjectionProviderModuleError");
221
+ i(this, "InjectionProviderModuleError");
222
222
  }
223
223
  name=e.name;
224
224
  constructor(e, i) {
@@ -226,7 +226,7 @@ var A = class e extends Error {
226
226
  }
227
227
  }, F = class e extends R {
228
228
  static {
229
- i(this, "XInjectionProviderModuleDisposedError");
229
+ i(this, "InjectionProviderModuleDisposedError");
230
230
  }
231
231
  name=e.name;
232
232
  constructor(e) {
@@ -234,7 +234,7 @@ var A = class e extends Error {
234
234
  }
235
235
  }, O = class e extends R {
236
236
  static {
237
- i(this, "XInjectionDynamicExportsOutOfRange");
237
+ i(this, "InjectionDynamicExportsOutOfRange");
238
238
  }
239
239
  name=e.name;
240
240
  constructor(e) {
@@ -242,7 +242,7 @@ var A = class e extends Error {
242
242
  }
243
243
  }, N = class e extends R {
244
244
  static {
245
- i(this, "XInjectionProviderModuleMissingIdentifierError");
245
+ i(this, "InjectionProviderModuleMissingIdentifierError");
246
246
  }
247
247
  name=e.name;
248
248
  constructor(e) {
@@ -263,7 +263,7 @@ var W = class {
263
263
  i(this, "ProviderModuleUtils");
264
264
  }
265
265
  get container() {
266
- return this.module.toNaked().container;
266
+ return this.moduleNaked.container;
267
267
  }
268
268
  module;
269
269
  moduleNaked;
@@ -367,10 +367,9 @@ var W = class {
367
367
  }
368
368
  clone(i) {
369
369
  let t = [ ...this.providers ];
370
- return i?.providersMap && (t = t.map((e => i.providersMap(e, this, !1)))), new e(o.buildInternalConstructorParams({
370
+ return i?.providersMap && (t = t.map((e => i.providersMap(e, this)))), new e(o.buildInternalConstructorParams({
371
371
  isAppModule: this.isAppModule,
372
372
  identifier: this.identifier,
373
- isDisposed: this.isDisposed,
374
373
  defaultScope: this.defaultScope.native,
375
374
  dynamicExports: this.dynamicExports,
376
375
  onReady: this.onReady,
@@ -553,4 +552,4 @@ var W = class {
553
552
  }
554
553
  }, z = new $;
555
554
 
556
- export { z as AppModule, t as GLOBAL_APP_MODULE_ID, $ as GlobalAppModule, G as GlobalContainer, m as Inject, E as InjectFromBase, v as Injectable, s as InjectionScope, y as MultiInject, T as Named, w as Optional, D as PostConstruct, M as PreDestroy, q as ProviderModule, o as ProviderModuleHelpers, r as ProviderTokenHelpers, k as Tagged, j as Unmanaged, O as XInjectionDynamicExportsOutOfRange, A as XInjectionError, F as XInjectionProviderModuleDisposedError, R as XInjectionProviderModuleError, N as XInjectionProviderModuleMissingIdentifierError, c as bindingScopeToInjectionScope, d as injectionScopeToBindingScope, u as isClass, h as isClassOrFunction, p as isFunction, l as isPlainObject };//# sourceMappingURL=index.js.map
555
+ export { z as AppModule, t as GLOBAL_APP_MODULE_ID, $ as GlobalAppModule, G as GlobalContainer, m as Inject, E as InjectFromBase, v as Injectable, O as InjectionDynamicExportsOutOfRange, A as InjectionError, F as InjectionProviderModuleDisposedError, R as InjectionProviderModuleError, N as InjectionProviderModuleMissingIdentifierError, s as InjectionScope, y as MultiInject, T as Named, w as Optional, D as PostConstruct, M as PreDestroy, q as ProviderModule, o as ProviderModuleHelpers, r as ProviderTokenHelpers, k as Tagged, j as Unmanaged, c as bindingScopeToInjectionScope, d as injectionScopeToBindingScope, u as isClass, h as isClassOrFunction, p as isFunction, l as isPlainObject };//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/constants.ts","../src/decorators/injectable.ts","../src/enums/injection-scope.enum.ts","../src/helpers/scope-converter.ts","../src/helpers/provider-token.ts","../src/helpers/is-class.ts","../src/helpers/is-class-or-function.ts","../src/helpers/is-function.ts","../src/helpers/is-plain-object.ts","../src/helpers/provider-module.ts","../src/decorators/inject.ts","../src/decorators/multi-inject.ts","../src/decorators/inject-from-base.ts","../src/decorators/named.ts","../src/decorators/optional.ts","../src/decorators/post-construct.ts","../src/decorators/pre-destroy.ts","../src/decorators/tagged.ts","../src/decorators/unmanaged.ts","../src/errors/base.error.ts","../src/errors/provider-module.error.ts","../src/errors/provider-module-disposed.error.ts","../src/errors/dynamic-export-out-of-range.error.ts","../src/errors/provider-module-missing-identifier.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/app.module.ts"],"sourcesContent":["/** The identifier of the `GlobalAppModule`. */\nexport const GLOBAL_APP_MODULE_ID = 'GlobalAppModule';\n","import { injectable as _injectable } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { injectionScopeToBindingScope } from '../helpers';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectable} for more details. */\nexport function Injectable(scope?: InjectionScope) {\n if (scope === undefined) return _injectable();\n\n return _injectable(injectionScopeToBindingScope(scope));\n}\n","export enum InjectionScope {\n /** When the service is resolved, the same cached resolved value will be used. */\n Singleton,\n\n /** When the service is resolved, a new resolved value will be used each time. */\n Transient,\n\n /** When the service is resolved within the same container request, the same resolved value will be used. */\n Request,\n}\n","import type { BindingScope } from 'inversify';\n\nimport { InjectionScope } from '../enums';\n\nexport function injectionScopeToBindingScope(injectionScope: InjectionScope): BindingScope {\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return 'Singleton';\n case InjectionScope.Transient:\n return 'Transient';\n case InjectionScope.Request:\n return 'Request';\n }\n}\n\nexport function bindingScopeToInjectionScope(bindingScope: BindingScope): InjectionScope {\n switch (bindingScope) {\n case 'Singleton':\n return InjectionScope.Singleton;\n case 'Transient':\n return InjectionScope.Transient;\n case 'Request':\n return InjectionScope.Request;\n }\n}\n","import { getClassMetadata } from '@inversifyjs/core';\nimport type { ServiceIdentifier } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport type {\n DependencyProvider,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderScopeOption,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\nimport { isClass } from './is-class';\nimport { isClassOrFunction } from './is-class-or-function';\nimport { isFunction } from './is-function';\nimport { isPlainObject } from './is-plain-object';\nimport { bindingScopeToInjectionScope } from './scope-converter';\n\nexport namespace ProviderTokenHelpers {\n export function isClassToken<T>(provider: ProviderToken<T>): provider is ProviderClassToken<T> {\n return hasProvideProperty(provider) && 'useClass' in provider;\n }\n\n export function isValueToken<T>(provider: ProviderToken<T>): provider is ProviderValueToken<T> {\n return hasProvideProperty(provider) && 'useValue' in provider;\n }\n\n export function isFactoryToken<T>(provider: ProviderToken<T>): provider is ProviderFactoryToken<T> {\n return hasProvideProperty(provider) && 'useFactory' in provider;\n }\n\n export function isProviderIdentifier<T = any>(value: any): value is ProviderIdentifier<T> {\n return typeof value === 'string' || typeof value === 'symbol' || isClassOrFunction(value);\n }\n\n export function toServiceIdentifier<T = any>(provider: ProviderToken<T>): ServiceIdentifier<T> {\n return isProviderIdentifier(provider) ? provider : provider.provide;\n }\n\n export function toServiceIdentifiers(providers: ProviderToken[]): ServiceIdentifier<unknown>[] {\n return providers.map((provider) => toServiceIdentifier(provider));\n }\n\n export function toDependencyProviderWithOptions<T extends DependencyProvider<any>>(\n original: T,\n // Can be used to override the options\n override?: Partial<T>\n ): T {\n if (isClass(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useClass: (override as any)?.useClass ?? original,\n };\n } else if (isFunction(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useFactory: (override as any)?.useFactory ?? original,\n };\n }\n\n return {\n ...original,\n ...override,\n };\n }\n\n /**\n * The priority order is as follows:\n * 1. From the `ProviderToken.scope`\n * 2. From the class `@Injectable(scope)` decorator\n * 3. From the `ProviderModule` default scope.\n *\n * @param provider The {@link ProviderToken}.\n * @param moduleDefaultScope The module default scope.\n */\n export function getInjectionScopeByPriority(\n provider: ProviderToken,\n moduleDefaultScope: InjectionScope\n ): InjectionScope {\n return tryGetScopeFromProvider(provider) ?? tryGetDecoratorScopeFromClass(provider) ?? moduleDefaultScope;\n }\n\n export function tryGetProviderOptions<T>(\n provider: ProviderToken<T>\n ): (ProviderOptions<T> & ProviderScopeOption) | undefined {\n if (!hasProvideProperty(provider)) return;\n\n return provider as any;\n }\n\n export function tryGetScopeFromProvider(provider: ProviderToken): InjectionScope | undefined {\n const providerOptions = tryGetProviderOptions(provider);\n if (!providerOptions) return;\n\n return providerOptions.scope;\n }\n\n export function tryGetDecoratorScopeFromClass<T = any>(provider: ProviderToken<T>): InjectionScope | undefined {\n const providerClass = toServiceIdentifier(provider);\n if (!isClass(providerClass)) return;\n\n const inversifyScope = getClassMetadata(providerClass as any)?.scope;\n if (!inversifyScope) return;\n\n return bindingScopeToInjectionScope(inversifyScope);\n }\n\n function hasProvideProperty(provider: any): provider is object {\n return isPlainObject(provider) && typeof provider === 'object' && 'provide' in provider;\n }\n}\n","export function isClass(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return Function.prototype.toString.call(v).startsWith('class ');\n}\n","import type { Class } from 'type-fest';\n\nexport function isClassOrFunction(value: any): value is Function | Class<any> {\n return typeof value === 'function';\n}\n","export function isFunction(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return !Function.prototype.toString.call(v).startsWith('class ');\n}\n","/*\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: any): o is object {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import type { DynamicExports, ProviderModuleOptions, ProviderModuleOptionsInternal, StaticExports } from '../types';\n\nexport namespace ProviderModuleHelpers {\n export function buildInternalConstructorParams(\n params: ProviderModuleOptions & ProviderModuleOptionsInternal\n ): ProviderModuleOptions {\n return params as ProviderModuleOptions;\n }\n\n export function isDynamicExport(exporter: StaticExports | DynamicExports): exporter is DynamicExports {\n return !Array.isArray(exporter) && typeof exporter === 'function';\n }\n}\n","import { inject as _inject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#inject} for more details. */\nexport function Inject(provider: ProviderToken) {\n return _inject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { multiInject as _multiInject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#multiinject} for more details. */\nexport function MultiInject(provider: ProviderToken) {\n return _multiInject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { injectFromBase as _injectFromBase } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectfrombase} for more details. */\nexport function InjectFromBase(options?: Parameters<typeof _injectFromBase>[0]) {\n return _injectFromBase(options);\n}\n","import { named as _named, type MetadataName } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#named} for more details. */\nexport function Named(name: MetadataName) {\n return _named(name);\n}\n","import { optional as _optional } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#optional} for more details. */\nexport function Optional() {\n return _optional();\n}\n","import { postConstruct as _postConstruct } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#postconstruct} for more details. */\nexport function PostConstruct() {\n return _postConstruct();\n}\n","import { preDestroy as _preDestroy } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#predestroy} for more details. */\nexport function PreDestroy() {\n return _preDestroy();\n}\n","import { tagged as _tagged, type MetadataTag } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#tagged} for more details. */\nexport function Tagged(key: MetadataTag, value: unknown) {\n return _tagged(key, value);\n}\n","import { unmanaged as _unmanaged } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#unmanaged} for more details. */\nexport function Unmanaged() {\n return _unmanaged();\n}\n","/** Exception which indicates that there is a generic error. */\nexport class XInjectionError extends Error {\n name = XInjectionError.name;\n}\n","import type { IProviderModule } from '../types';\n\n/** Exception which indicates that there is a generic error with an instance of {@link IProviderModule}. */\nexport class XInjectionProviderModuleError extends Error {\n name = XInjectionProviderModuleError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(`{ProviderModule.${module.toString()}} => ${message}`);\n }\n}\n","import { IProviderModule } from '../types';\nimport { XInjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an invokation of a disposed module. */\nexport class XInjectionProviderModuleDisposedError extends XInjectionProviderModuleError {\n name = XInjectionProviderModuleDisposedError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'Has been disposed! You can re-initialize it by using the `_lazyInit` method.');\n }\n}\n","import type { IProviderModule } from '../types';\nimport { XInjectionProviderModuleError } from './provider-module.error';\n\n/**\n * Exception which indicates that an instance of {@link IProviderModule}\n * imports another module which dynamically exports its providers/modules and\n * is trying to dynamically export more or different providers/modules than the\n * ones declared into its static exports.\n */\nexport class XInjectionDynamicExportsOutOfRange extends XInjectionProviderModuleError {\n name = XInjectionDynamicExportsOutOfRange.name;\n\n constructor(module: IProviderModule) {\n super(\n module,\n `The 'ProviderModule.${module.toString()}' is trying to dynamically export providers/modules out of the declared range of the static exports!`\n );\n }\n}\n","import { IProviderModule } from '../types';\nimport { XInjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates that a module has been initialized without an `identifier`. */\nexport class XInjectionProviderModuleMissingIdentifierError extends XInjectionProviderModuleError {\n name = XInjectionProviderModuleMissingIdentifierError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'An `identifier` must be supplied!');\n }\n}\n","import { Container } from 'inversify';\n\n/**\n * The low-level App Container.\n *\n * **Internally used, please use the `AppModule` to interact with it.**\n */\nexport const GlobalContainer = new Container({\n defaultScope: 'Singleton',\n});\n","import {\r\n Container,\r\n type BindingActivation,\r\n type BindingDeactivation,\r\n type BindToFluentSyntax,\r\n type GetOptions,\r\n type IsBoundOptions,\r\n} from 'inversify';\r\n\r\nimport { InjectionScope } from '../enums';\r\nimport {\r\n XInjectionDynamicExportsOutOfRange,\r\n XInjectionProviderModuleDisposedError,\r\n XInjectionProviderModuleError,\r\n XInjectionProviderModuleMissingIdentifierError,\r\n} from '../errors';\r\nimport { injectionScopeToBindingScope, isPlainObject, ProviderModuleHelpers, ProviderTokenHelpers } from '../helpers';\r\nimport type {\r\n CloneParams,\r\n DependencyProvider,\r\n IProviderModule,\r\n IProviderModuleNaked,\r\n LazyInitOptions,\r\n ProviderModuleGetManyParam,\r\n ProviderModuleGetManySignature,\r\n ProviderModuleOptions,\r\n ProviderModuleOptionsInternal,\r\n ProviderToken,\r\n RegisteredBindingSideEffects,\r\n StaticExports,\r\n} from '../types';\r\nimport { ProviderModuleUtils } from '../utils';\r\nimport { GlobalContainer } from './global-container';\r\n\r\n/**\r\n * Modules are highly recommended as an effective way to organize your components.\r\n * For most applications, you'll likely have multiple modules, each encapsulating a closely related set of capabilities.\r\n *\r\n * _See {@link ProviderModuleOptions | ProviderModuleOptions}_.\r\n *\r\n * @example\r\n * ```ts\r\n * import { ProviderModule } from '@adimm/x-injection';\r\n *\r\n * const EngineModule = new ProviderModule({\r\n * identifier: Symbol('EngineModule'),\r\n * providers: [EngineService],\r\n * exports: [EngineService]\r\n * });\r\n *\r\n * const DashboardModule = new ProviderModule({\r\n * identifier: Symbol('DashboardModule'),\r\n * providers: [DashboardService],\r\n * exports: [DashboardService]\r\n * });\r\n *\r\n * const CarModule = new ProviderModule({\r\n * identifier: Symbol('CarModule'),\r\n * imports: [EngineModule, DashboardModule],\r\n * providers: [CarService],\r\n * exports: [CarService]\r\n * });\r\n *\r\n * // Run-time class replacement:\r\n * const RedCarModule = new ProviderModule({\r\n * identifier: Symbol('RedCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useClass: RedCarService,\r\n * }\r\n * ],\r\n * });\r\n *\r\n * // Run-time factory example:\r\n * const BlackCarModule = new ProviderModule({\r\n * identifier: Symbol('BlackCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useFactory: (carService: CarService) => {\r\n * carService.setColor('black');\r\n *\r\n * return carService;\r\n * },\r\n * inject: [CarService]\r\n * }\r\n * ],\r\n * });\r\n * ```\r\n */\r\nexport class ProviderModule implements IProviderModule {\r\n readonly identifier: symbol;\r\n readonly isDisposed: boolean = false;\r\n\r\n protected readonly isAppModule: boolean;\r\n protected readonly container!: Container;\r\n protected readonly defaultScope!: IProviderModuleNaked['defaultScope'];\r\n protected readonly dynamicExports: IProviderModuleNaked['dynamicExports'];\r\n protected readonly onReady: IProviderModuleNaked['onReady'];\r\n protected readonly onDispose: IProviderModuleNaked['onDispose'];\r\n protected readonly importedProvidersMap: IProviderModuleNaked['importedProvidersMap'];\r\n protected readonly moduleUtils!: IProviderModuleNaked['moduleUtils'];\r\n protected readonly imports!: IProviderModuleNaked['imports'];\r\n protected readonly providers!: IProviderModuleNaked['providers'];\r\n protected readonly importedProviders!: IProviderModuleNaked['importedProviders'];\r\n protected readonly exports!: IProviderModuleNaked['exports'];\r\n\r\n private readonly registeredBindingSideEffects!: RegisteredBindingSideEffects;\r\n\r\n constructor({\r\n identifier,\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: ProviderModuleOptions) {\r\n const internalParams = _internalParams as ProviderModuleOptionsInternal;\r\n\r\n // The module id once set should never be changed!\r\n this.identifier = this.setIdentifier(identifier);\r\n this.isDisposed = internalParams.isDisposed ?? false;\r\n // Same goes for the `isAppModule`.\r\n this.isAppModule = internalParams.isAppModule ?? false;\r\n\r\n // If this module is the `AppModule`,\r\n // the initialization will be done when the `IProviderModuleNaked._lazyInit` method is invoked.\r\n if (this.isAppModule) return;\r\n\r\n this._lazyInit({\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams,\r\n });\r\n }\r\n\r\n get<T>(provider: ProviderToken<T>, isOptional?: boolean): T {\r\n return this.__get(provider, { optional: isOptional ?? false });\r\n }\r\n\r\n getMany<D extends (ProviderModuleGetManyParam<any> | ProviderToken)[]>(\r\n ...deps: D | unknown[]\r\n ): ProviderModuleGetManySignature<D> {\r\n return (deps as D).map((dep) => {\r\n const withOptions = isPlainObject(dep) && 'provider' in dep;\r\n\r\n return this.get(withOptions ? dep.provider : dep, withOptions ? dep.isOptional : false);\r\n }) as any;\r\n }\r\n\r\n onActivationEvent<T>(provider: ProviderToken<T>, cb: BindingActivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onActivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n onDeactivationEvent<T>(provider: ProviderToken<T>, cb: BindingDeactivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onDeactivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n toNaked(): IProviderModuleNaked {\r\n return this as any;\r\n }\r\n\r\n clone(options?: CloneParams): IProviderModule {\r\n let providers = [...this.providers];\r\n\r\n if (options?.providersMap) {\r\n providers = providers.map((provider) => options.providersMap!(provider, this, false));\r\n }\r\n\r\n return new ProviderModule(\r\n ProviderModuleHelpers.buildInternalConstructorParams({\r\n isAppModule: this.isAppModule,\r\n identifier: this.identifier,\r\n isDisposed: this.isDisposed,\r\n defaultScope: this.defaultScope.native,\r\n dynamicExports: this.dynamicExports,\r\n onReady: this.onReady,\r\n onDispose: this.onDispose,\r\n importedProvidersMap: options?.importedProvidersMap,\r\n imports: [...this.imports],\r\n providers,\r\n exports: [...this.exports],\r\n })\r\n );\r\n }\r\n\r\n toString(): string {\r\n return this.identifier?.description ?? 'Unknown';\r\n }\r\n\r\n private setIdentifier(identifier: symbol): symbol {\r\n if (!identifier) throw new XInjectionProviderModuleMissingIdentifierError(this);\r\n\r\n return identifier;\r\n }\r\n\r\n private prepareContainer(params: ProviderModuleOptionsInternal): Container {\r\n if (this.isAppModule) {\r\n return params.container?.() ?? GlobalContainer;\r\n } else if (params.container) {\r\n console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`);\r\n\r\n return params.container();\r\n } else {\r\n return new Container({\r\n parent: GlobalContainer,\r\n defaultScope: this.defaultScope.inversify,\r\n });\r\n }\r\n }\r\n\r\n private injectImportedModules(modules?: IProviderModuleNaked[]): void {\r\n if (!modules || modules.length === 0) return;\r\n\r\n modules.forEach((module) => {\r\n if (module.toString() === 'GlobalAppModule') {\r\n throw new XInjectionProviderModuleError(this, `The 'GlobalAppModule' can't be imported!`);\r\n }\r\n\r\n const moduleStaticExports = module._getExportableModulesAndProviders();\r\n const moduleDynamicExports = module.dynamicExports?.(this, moduleStaticExports);\r\n const moduleHasDynamicExports = moduleDynamicExports !== undefined;\r\n\r\n if (moduleHasDynamicExports) {\r\n this.shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module,\r\n moduleStaticExports,\r\n moduleDynamicExports\r\n );\r\n }\r\n\r\n (moduleDynamicExports ?? moduleStaticExports).forEach((exportable) => {\r\n if (exportable instanceof ProviderModule) {\r\n const exportableModule = exportable.toNaked();\r\n\r\n // The current item of the `exports` array is actually\r\n // another ProviderModule, therefore we must recursively drill into it\r\n // to import its exported modules/providers.\r\n this.injectImportedModules([exportableModule]);\r\n\r\n return;\r\n }\r\n\r\n const provider = exportable as DependencyProvider;\r\n const importedProvider = this.importedProvidersMap!(\r\n {\r\n scope: ProviderTokenHelpers.getInjectionScopeByPriority(provider, module.defaultScope.native),\r\n provide: ProviderTokenHelpers.toServiceIdentifier(provider),\r\n useFactory: () => module.get(provider),\r\n // As we are using a factory token, there is no need to include the `onEvent` and `when` properties\r\n // into the processed `ProviderToken` created for this imported provider,\r\n // because the `importedModule.get` invokation will\r\n // fire the `onEvent` and `when` properties of the original imported provider.\r\n },\r\n provider,\r\n module\r\n );\r\n\r\n this.importedProviders.set(module, [...(this.importedProviders.get(module) ?? []), importedProvider]);\r\n\r\n this.moduleUtils.bindToContainer(importedProvider, module.defaultScope.native);\r\n\r\n // Let's make sure that when the parent module unbinds the provider\r\n // this module unbinds it aswell.\r\n module._onUnbind(provider, () => this.__unbind(importedProvider));\r\n });\r\n });\r\n }\r\n\r\n private injectProviders(): void {\r\n this.providers.forEach((provider) => this.moduleUtils.bindToContainer(provider, this.defaultScope.native));\r\n }\r\n\r\n private registerBindingSideEffect(\r\n provider: ProviderToken,\r\n on: 'bind' | 'rebind' | 'unbind',\r\n cb: () => Promise<void> | void\r\n ): void {\r\n if (!this.registeredBindingSideEffects.has(provider)) {\r\n this.registeredBindingSideEffects.set(provider, {\r\n onBindEffects: [],\r\n onRebindEffects: [],\r\n onUnbindEffects: [],\r\n });\r\n }\r\n\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider)!;\r\n\r\n if (on === 'bind') {\r\n providerBindingSideEffects.onBindEffects.push(cb);\r\n } else if (on === 'rebind') {\r\n providerBindingSideEffects.onRebindEffects.push(cb);\r\n } else {\r\n providerBindingSideEffects.onUnbindEffects.push(cb);\r\n }\r\n }\r\n\r\n private invokeRegisteredBindingSideEffects(provider: ProviderToken, event: 'onBind' | 'onRebind' | 'onUnbind'): void {\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider);\r\n /* istanbul ignore next */\r\n if (!providerBindingSideEffects) return;\r\n\r\n providerBindingSideEffects[`${event}Effects`].forEach((cb) => cb());\r\n }\r\n\r\n private removeRegisteredBindingSideEffects(provider: ProviderToken | 'all'): void {\r\n /* istanbul ignore next */\r\n if (!this.registeredBindingSideEffects) return;\r\n\r\n if (provider === 'all') {\r\n this.registeredBindingSideEffects.forEach(({ onUnbindEffects }) => onUnbindEffects.forEach((cb) => cb()));\r\n\r\n return;\r\n }\r\n\r\n if (!this.registeredBindingSideEffects.has(provider)) return;\r\n\r\n this.registeredBindingSideEffects.get(provider)?.onUnbindEffects.forEach((cb) => cb());\r\n this.registeredBindingSideEffects.delete(provider);\r\n }\r\n\r\n private shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module: IProviderModuleNaked,\r\n staticExports: StaticExports,\r\n dynamicExports: StaticExports\r\n ): void {\r\n if (\r\n dynamicExports.length > staticExports.length ||\r\n dynamicExports.some((dynamicExport) => !staticExports.includes(dynamicExport))\r\n ) {\r\n throw new XInjectionDynamicExportsOutOfRange(module);\r\n }\r\n }\r\n\r\n private shouldThrowIfDisposed(): void {\r\n if (this.container !== null) return;\r\n\r\n throw new XInjectionProviderModuleDisposedError(this);\r\n }\r\n\r\n //#region IProviderModuleNaked methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._dispose}.\r\n */\r\n protected async _dispose(): Promise<void> {\r\n await this.onDispose?.(this);\r\n await this.__unbindAll();\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = null;\r\n //@ts-expect-error Read-only property.\r\n this.imports = null;\r\n //@ts-expect-error Read-only property.\r\n this.providers = null;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = null;\r\n //@ts-expect-error Read-only property.\r\n this.exports = null;\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = null;\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = null;\r\n\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = true;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._lazyInit}.\r\n */\r\n protected _lazyInit({\r\n imports = [],\r\n providers = [],\r\n exports = [],\r\n defaultScope = InjectionScope.Singleton,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: LazyInitOptions): IProviderModule {\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = false;\r\n //@ts-expect-error Read-only property.\r\n this.imports = imports;\r\n //@ts-expect-error Read-only property.\r\n this.providers = providers;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = _internalParams.importedProviders ?? new Map();\r\n //@ts-expect-error Read-only property.\r\n this.exports = exports;\r\n //@ts-expect-error Read-only property.\r\n this.defaultScope = { native: defaultScope, inversify: injectionScopeToBindingScope(defaultScope) };\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = dynamicExports;\r\n //@ts-expect-error Read-only property.\r\n this.onReady = onReady;\r\n //@ts-expect-error Read-only property.\r\n this.onDispose = onDispose;\r\n //@ts-expect-error Read-only propery.\r\n this.importedProvidersMap = _internalParams.importedProvidersMap ?? ((provider) => provider);\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = this.prepareContainer({ ..._internalParams });\r\n //@ts-expect-error Read-only property.\r\n this.moduleUtils = new ProviderModuleUtils(this);\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = new Map();\r\n\r\n this.injectImportedModules(this._getImportedModules());\r\n this.injectProviders();\r\n\r\n this.onReady?.(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getImportedModules}.\r\n */\r\n protected _getImportedModules(): IProviderModuleNaked[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.imports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getProviders}.\r\n */\r\n protected _getProviders(): DependencyProvider[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.providers;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getExportableModulesAndProviders}.\r\n */\r\n protected _getExportableModulesAndProviders(): StaticExports {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.exports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onBind}.\r\n */\r\n protected _onBind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'bind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onRebind}.\r\n */\r\n protected _onRebind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'rebind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onUnbind}.\r\n */\r\n protected _onUnbind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'unbind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._overwriteContainer}.\r\n */\r\n protected _overwriteContainer(cb: () => Container): void {\r\n //@ts-expect-error Read-only property.\r\n this.container = cb();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region InversifyJS Container native methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__bind}.\r\n */\r\n /* istanbul ignore next */\r\n protected __bind<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onBind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__get}.\r\n */\r\n /* istanbul ignore next */\r\n protected __get<T>(provider: ProviderToken<T>, options?: GetOptions): T {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.get(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected __getAll<T>(provider: ProviderToken<T>, options?: GetOptions): T[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAll(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAllAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAllAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T[]> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAllAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isCurrentBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isCurrentBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isCurrentBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__takeSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __takeSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.snapshot();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__restoreSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __restoreSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.restore();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __rebind<T>(provider: ProviderToken<T>): Promise<BindToFluentSyntax<T>> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = await this.container.rebind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __rebindSync<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.rebindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbind(provider: ProviderToken): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __unbindSync(provider: ProviderToken): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.unbindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbindAll(): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbindAll();\r\n\r\n this.removeRegisteredBindingSideEffects('all');\r\n }\r\n\r\n //#endregion\r\n}\r\n","import type { BindInWhenOnFluentSyntax, BindOnFluentSyntax, BindWhenOnFluentSyntax, Container } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\n\n/**\n * Class containing an internal set of `utils`.\n *\n * Each {@link IProviderModuleNaked.moduleUtils | ProviderModule} instance has its own {@link ProviderModuleUtils} property instance.\n */\nexport class ProviderModuleUtils {\n /** The low-level InversifyJS {@link Container} owned by {@link ProviderModuleUtils.module | module}. */\n get container(): Container {\n return this.module.toNaked().container;\n }\n\n /** The parent {@link IProviderModule | ProviderModule} of `this` instance. */\n readonly module: IProviderModule;\n readonly moduleNaked: IProviderModuleNaked;\n\n constructor(module: IProviderModule) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n }\n\n /**\n * Low-level method which can be used to manually register _(bind)_ a new {@link provider} into the {@link ProviderModuleUtils.module | module} container.\n *\n * **Note:** _You shouldn't directly use this to register providers as they will not appear_\n * _into the module's `imports` and `exports` arrays! Therefore leading to unexpected bugs and confusion!_\n *\n * @param provider The {@link ProviderToken | provider} to register.\n * @param defaultScope Optionally provide the default {@link InjectionScope} to use when applicable.\n * @returns `true` when the {@link provider} has been bound otherwhise `false`.\n */\n bindToContainer<T>(provider: DependencyProvider<T>, defaultScope: InjectionScope): boolean {\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) {\n return this.bindSelfTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isClassToken(provider)) {\n return this.bindClassTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isValueToken(provider)) {\n return this.bindValueTokenToContainer(provider);\n } else if (ProviderTokenHelpers.isFactoryToken(provider)) {\n return this.bindFactoryTokenToContainer(provider, defaultScope);\n }\n\n return false;\n }\n\n private bindSelfTokenToContainer<T>(provider: ProviderIdentifier<T>, defaultScope: InjectionScope): boolean {\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toSelf(),\n defaultScope\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindClassTokenToContainer<T>(provider: ProviderClassToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).to(provider.useClass),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindValueTokenToContainer<T>(provider: ProviderValueToken<T>): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toConstantValue(provider.useValue)\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindFactoryTokenToContainer<T>(provider: ProviderFactoryToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container\n .bind(ProviderTokenHelpers.toServiceIdentifier(provider))\n .toResolvedValue(provider.useFactory, ProviderTokenHelpers.toServiceIdentifiers(provider.inject ?? [])),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n /** Sets the {@link InjectionScope} of a bound {@link provider}. */\n private setBindingScope<T>(\n provider: ProviderToken<T>,\n binding: BindInWhenOnFluentSyntax<T>,\n defaultScope: InjectionScope\n ): BindWhenOnFluentSyntax<T> {\n // A constant token will always be a singleton.\n if (ProviderTokenHelpers.isValueToken(provider)) return binding;\n\n const injectionScope = ProviderTokenHelpers.getInjectionScopeByPriority(provider, defaultScope);\n\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return binding.inSingletonScope();\n case InjectionScope.Transient:\n return binding.inTransientScope();\n case InjectionScope.Request:\n return binding.inRequestScope();\n }\n }\n\n /** Sets the `when` clause of a bound {@link provider}. */\n private setWhenBinding<T>(\n provider: ProviderToken<T>,\n binding: BindWhenOnFluentSyntax<T>\n ): BindOnFluentSyntax<unknown> {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return binding;\n\n const when = (provider as ProviderOptions<unknown>).when;\n if (!when) return binding;\n\n return binding.when(when);\n }\n\n /** Sets the `activation` and `deactivation` events of a bound {@link provider}. */\n private setBindingOnEvent(provider: ProviderToken, binding: BindOnFluentSyntax<any>): void {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return;\n\n const opts = provider as ProviderOptions<unknown>;\n\n if (opts.onEvent?.activation) {\n binding.onActivation(opts.onEvent.activation);\n }\n\n if (opts.onEvent?.deactivation) {\n binding.onDeactivation(opts.onEvent.deactivation);\n }\n }\n}\n","import { XInjectionError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { ProviderModule } from './provider-module';\n\n/**\n * Class of the {@link AppModule} instance.\n *\n * **You shouldn't initialize a new instance of this class, please use the {@link AppModule} instance!**\n */\nexport class GlobalAppModule extends ProviderModule implements IAppModule {\n private nakedModule = this as unknown as IProviderModuleNaked;\n private isLoaded = false;\n\n constructor() {\n super(\n ProviderModuleHelpers.buildInternalConstructorParams({\n identifier: Symbol(GLOBAL_APP_MODULE_ID),\n isAppModule: true,\n })\n );\n }\n\n register<AsNaked extends boolean = false>(\n options: AppModuleOptions\n ): AsNaked extends false ? IAppModule : IAppModule & IProviderModuleNaked {\n if (this.isLoaded) {\n throw new XInjectionError(`The '${this.toString()}' has already been registered!`);\n }\n\n this.nakedModule._lazyInit(options);\n\n this.isLoaded = true;\n\n return this as any;\n }\n\n /* istanbul ignore next */\n override toNaked(): IAppModule & IProviderModuleNaked {\n return super.toNaked() as any;\n }\n\n protected override async _dispose(): Promise<void> {\n this.isLoaded = false;\n\n super._dispose();\n }\n}\n\n/**\n * Special instance of {@link ProviderModule} which acts as the global module of your application in which you can inject any provider\n * which must be available through your entire application.\n *\n * The registered providers will automatically be available inside all the modules.\n *\n * @example\n * ```ts\n * import { AppModule } from '@adimm/x-injection';\n *\n * // The `register` method must be invoked only once during your application life cycle!\n * AppModule.register({\n * imports: [ConfigModule, ApiModule, UserModule, DatabaseModule],\n * providers: [DummyService],\n * });\n * ```\n */\nexport const AppModule = new GlobalAppModule();\n"],"mappings":"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","names":["GLOBAL_APP_MODULE_ID","injectable","_injectable","InjectionScope","injectionScopeToBindingScope","injectionScope","InjectionScope","Singleton","Transient","Request","bindingScopeToInjectionScope","bindingScope","getClassMetadata","isClass","v","Function","prototype","toString","call","startsWith","isClassOrFunction","value","isFunction","v","Function","prototype","toString","call","startsWith","isObject","o","Object","prototype","toString","call","isPlainObject","ctor","constructor","undefined","prot","hasOwnProperty","ProviderTokenHelpers","isClassToken","provider","hasProvideProperty","isValueToken","isFactoryToken","isProviderIdentifier","value","isClassOrFunction","toServiceIdentifier","provide","toServiceIdentifiers","providers","map","toDependencyProviderWithOptions","original","override","isClass","useClass","isFunction","useFactory","getInjectionScopeByPriority","moduleDefaultScope","tryGetScopeFromProvider","tryGetDecoratorScopeFromClass","tryGetProviderOptions","providerOptions","scope","providerClass","inversifyScope","getClassMetadata","bindingScopeToInjectionScope","isPlainObject","ProviderModuleHelpers","buildInternalConstructorParams","params","isDynamicExport","exporter","Array","isArray","Injectable","scope","undefined","_injectable","injectionScopeToBindingScope","inject","_inject","Inject","provider","_inject","ProviderTokenHelpers","toServiceIdentifier","multiInject","_multiInject","MultiInject","provider","_multiInject","ProviderTokenHelpers","toServiceIdentifier","injectFromBase","_injectFromBase","InjectFromBase","options","_injectFromBase","named","_named","Named","name","_named","optional","_optional","Optional","_optional","postConstruct","_postConstruct","PostConstruct","_postConstruct","preDestroy","_preDestroy","PreDestroy","_preDestroy","tagged","_tagged","Tagged","key","value","_tagged","unmanaged","_unmanaged","Unmanaged","_unmanaged","XInjectionError","Error","name","XInjectionProviderModuleError","Error","name","constructor","module","message","toString","XInjectionProviderModuleDisposedError","XInjectionProviderModuleError","name","constructor","module","XInjectionDynamicExportsOutOfRange","XInjectionProviderModuleError","name","constructor","module","toString","XInjectionProviderModuleMissingIdentifierError","XInjectionProviderModuleError","name","constructor","module","Container","GlobalContainer","defaultScope","Container","ProviderModuleUtils","container","module","toNaked","moduleNaked","constructor","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","setBindingScope","bind","toServiceIdentifier","toSelf","__isCurrentBound","setBindingOnEvent","setWhenBinding","to","useClass","toConstantValue","useValue","toResolvedValue","useFactory","toServiceIdentifiers","inject","binding","injectionScope","getInjectionScopeByPriority","InjectionScope","Singleton","inSingletonScope","Transient","inTransientScope","Request","inRequestScope","when","opts","onEvent","activation","onActivation","deactivation","onDeactivation","ProviderModule","identifier","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","_internalParams","internalParams","setIdentifier","_lazyInit","get","provider","isOptional","__get","optional","getMany","deps","map","dep","withOptions","isPlainObject","onActivationEvent","cb","shouldThrowIfDisposed","onActivation","ProviderTokenHelpers","toServiceIdentifier","onDeactivationEvent","onDeactivation","toNaked","clone","options","providersMap","ProviderModuleHelpers","buildInternalConstructorParams","native","toString","description","XInjectionProviderModuleMissingIdentifierError","prepareContainer","params","GlobalContainer","console","warn","Container","parent","inversify","injectImportedModules","modules","length","forEach","module","XInjectionProviderModuleError","moduleStaticExports","_getExportableModulesAndProviders","moduleDynamicExports","moduleHasDynamicExports","undefined","shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports","exportable","exportableModule","importedProvider","scope","getInjectionScopeByPriority","provide","useFactory","set","bindToContainer","_onUnbind","__unbind","injectProviders","registerBindingSideEffect","on","has","onBindEffects","onRebindEffects","onUnbindEffects","providerBindingSideEffects","push","invokeRegisteredBindingSideEffects","event","removeRegisteredBindingSideEffects","delete","staticExports","some","dynamicExport","includes","XInjectionDynamicExportsOutOfRange","XInjectionProviderModuleDisposedError","_dispose","__unbindAll","InjectionScope","Singleton","Map","injectionScopeToBindingScope","ProviderModuleUtils","_getImportedModules","_getProviders","_onBind","_onRebind","_overwriteContainer","__bind","binding","bind","__getAsync","getAsync","__getAll","getAll","__getAllAsync","getAllAsync","__isBound","isBound","__isCurrentBound","isCurrentBound","__takeSnapshot","snapshot","__restoreSnapshot","restore","__rebind","rebind","__rebindSync","rebindSync","unbind","__unbindSync","unbindSync","unbindAll","GlobalAppModule","ProviderModule","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","XInjectionError","toString","_lazyInit","toNaked","_dispose","AppModule"]}
1
+ {"version":3,"sources":["../src/core/constants.ts","../src/decorators/injectable.ts","../src/enums/injection-scope.enum.ts","../src/helpers/scope-converter.ts","../src/helpers/provider-token.ts","../src/helpers/is-class.ts","../src/helpers/is-class-or-function.ts","../src/helpers/is-function.ts","../src/helpers/is-plain-object.ts","../src/helpers/provider-module.ts","../src/decorators/inject.ts","../src/decorators/multi-inject.ts","../src/decorators/inject-from-base.ts","../src/decorators/named.ts","../src/decorators/optional.ts","../src/decorators/post-construct.ts","../src/decorators/pre-destroy.ts","../src/decorators/tagged.ts","../src/decorators/unmanaged.ts","../src/errors/base.error.ts","../src/errors/provider-module.error.ts","../src/errors/provider-module-disposed.error.ts","../src/errors/dynamic-export-out-of-range.error.ts","../src/errors/provider-module-missing-identifier.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/app.module.ts"],"sourcesContent":["/** The identifier of the `GlobalAppModule`. */\nexport const GLOBAL_APP_MODULE_ID = 'GlobalAppModule';\n","import { injectable as _injectable } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { injectionScopeToBindingScope } from '../helpers';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectable} for more details. */\nexport function Injectable(scope?: InjectionScope) {\n if (scope === undefined) return _injectable();\n\n return _injectable(injectionScopeToBindingScope(scope));\n}\n","export enum InjectionScope {\n /** When the service is resolved, the same cached resolved value will be used. */\n Singleton,\n\n /** When the service is resolved, a new resolved value will be used each time. */\n Transient,\n\n /** When the service is resolved within the same container request, the same resolved value will be used. */\n Request,\n}\n","import type { BindingScope } from 'inversify';\n\nimport { InjectionScope } from '../enums';\n\nexport function injectionScopeToBindingScope(injectionScope: InjectionScope): BindingScope {\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return 'Singleton';\n case InjectionScope.Transient:\n return 'Transient';\n case InjectionScope.Request:\n return 'Request';\n }\n}\n\nexport function bindingScopeToInjectionScope(bindingScope: BindingScope): InjectionScope {\n switch (bindingScope) {\n case 'Singleton':\n return InjectionScope.Singleton;\n case 'Transient':\n return InjectionScope.Transient;\n case 'Request':\n return InjectionScope.Request;\n }\n}\n","import { getClassMetadata } from '@inversifyjs/core';\nimport type { ServiceIdentifier } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport type {\n DependencyProvider,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderScopeOption,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\nimport { isClass } from './is-class';\nimport { isClassOrFunction } from './is-class-or-function';\nimport { isFunction } from './is-function';\nimport { isPlainObject } from './is-plain-object';\nimport { bindingScopeToInjectionScope } from './scope-converter';\n\nexport namespace ProviderTokenHelpers {\n export function isClassToken<T>(provider: ProviderToken<T>): provider is ProviderClassToken<T> {\n return hasProvideProperty(provider) && 'useClass' in provider;\n }\n\n export function isValueToken<T>(provider: ProviderToken<T>): provider is ProviderValueToken<T> {\n return hasProvideProperty(provider) && 'useValue' in provider;\n }\n\n export function isFactoryToken<T>(provider: ProviderToken<T>): provider is ProviderFactoryToken<T> {\n return hasProvideProperty(provider) && 'useFactory' in provider;\n }\n\n export function isProviderIdentifier<T = any>(value: any): value is ProviderIdentifier<T> {\n return typeof value === 'string' || typeof value === 'symbol' || isClassOrFunction(value);\n }\n\n export function toServiceIdentifier<T = any>(provider: ProviderToken<T>): ServiceIdentifier<T> {\n return isProviderIdentifier(provider) ? provider : provider.provide;\n }\n\n export function toServiceIdentifiers(providers: ProviderToken[]): ServiceIdentifier<unknown>[] {\n return providers.map((provider) => toServiceIdentifier(provider));\n }\n\n export function toDependencyProviderWithOptions<T extends DependencyProvider<any>>(\n original: T,\n // Can be used to override the options\n override?: Partial<T>\n ): T {\n if (isClass(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useClass: (override as any)?.useClass ?? original,\n };\n } else if (isFunction(original)) {\n return {\n ...(override as any),\n provide: (override as any)?.provide ?? original,\n useFactory: (override as any)?.useFactory ?? original,\n };\n }\n\n return {\n ...original,\n ...override,\n };\n }\n\n /**\n * The priority order is as follows:\n * 1. From the `ProviderToken.scope`\n * 2. From the class `@Injectable(scope)` decorator\n * 3. From the `ProviderModule` default scope.\n *\n * @param provider The {@link ProviderToken}.\n * @param moduleDefaultScope The module default scope.\n */\n export function getInjectionScopeByPriority(\n provider: ProviderToken,\n moduleDefaultScope: InjectionScope\n ): InjectionScope {\n return tryGetScopeFromProvider(provider) ?? tryGetDecoratorScopeFromClass(provider) ?? moduleDefaultScope;\n }\n\n export function tryGetProviderOptions<T>(\n provider: ProviderToken<T>\n ): (ProviderOptions<T> & ProviderScopeOption) | undefined {\n if (!hasProvideProperty(provider)) return;\n\n return provider as any;\n }\n\n export function tryGetScopeFromProvider(provider: ProviderToken): InjectionScope | undefined {\n const providerOptions = tryGetProviderOptions(provider);\n if (!providerOptions) return;\n\n return providerOptions.scope;\n }\n\n export function tryGetDecoratorScopeFromClass<T = any>(provider: ProviderToken<T>): InjectionScope | undefined {\n const providerClass = toServiceIdentifier(provider);\n if (!isClass(providerClass)) return;\n\n const inversifyScope = getClassMetadata(providerClass as any)?.scope;\n if (!inversifyScope) return;\n\n return bindingScopeToInjectionScope(inversifyScope);\n }\n\n function hasProvideProperty(provider: any): provider is object {\n return isPlainObject(provider) && typeof provider === 'object' && 'provide' in provider;\n }\n}\n","export function isClass(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return Function.prototype.toString.call(v).startsWith('class ');\n}\n","import type { Class } from 'type-fest';\n\nexport function isClassOrFunction(value: any): value is Function | Class<any> {\n return typeof value === 'function';\n}\n","export function isFunction(v: any): boolean {\n if (typeof v !== 'function') return false;\n\n return !Function.prototype.toString.call(v).startsWith('class ');\n}\n","/*\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: any): o is object {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import type { DynamicExports, ProviderModuleOptions, ProviderModuleOptionsInternal, StaticExports } from '../types';\n\nexport namespace ProviderModuleHelpers {\n export function buildInternalConstructorParams(\n params: ProviderModuleOptions & ProviderModuleOptionsInternal\n ): ProviderModuleOptions {\n return params as ProviderModuleOptions;\n }\n\n export function isDynamicExport(exporter: StaticExports | DynamicExports): exporter is DynamicExports {\n return !Array.isArray(exporter) && typeof exporter === 'function';\n }\n}\n","import { inject as _inject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#inject} for more details. */\nexport function Inject(provider: ProviderToken) {\n return _inject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { multiInject as _multiInject } from 'inversify';\n\nimport { ProviderTokenHelpers } from '../helpers';\nimport type { ProviderToken } from '../types';\n\n/** See {@link https://inversify.io/docs/api/decorator/#multiinject} for more details. */\nexport function MultiInject(provider: ProviderToken) {\n return _multiInject(ProviderTokenHelpers.toServiceIdentifier(provider));\n}\n","import { injectFromBase as _injectFromBase } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#injectfrombase} for more details. */\nexport function InjectFromBase(options?: Parameters<typeof _injectFromBase>[0]) {\n return _injectFromBase(options);\n}\n","import { named as _named, type MetadataName } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#named} for more details. */\nexport function Named(name: MetadataName) {\n return _named(name);\n}\n","import { optional as _optional } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#optional} for more details. */\nexport function Optional() {\n return _optional();\n}\n","import { postConstruct as _postConstruct } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#postconstruct} for more details. */\nexport function PostConstruct() {\n return _postConstruct();\n}\n","import { preDestroy as _preDestroy } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#predestroy} for more details. */\nexport function PreDestroy() {\n return _preDestroy();\n}\n","import { tagged as _tagged, type MetadataTag } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#tagged} for more details. */\nexport function Tagged(key: MetadataTag, value: unknown) {\n return _tagged(key, value);\n}\n","import { unmanaged as _unmanaged } from 'inversify';\n\n/** See {@link https://inversify.io/docs/api/decorator/#unmanaged} for more details. */\nexport function Unmanaged() {\n return _unmanaged();\n}\n","/** Exception which indicates that there is a generic error. */\nexport class InjectionError extends Error {\n override name = InjectionError.name;\n}\n","import type { IProviderModule } from '../types';\n\n/** Exception which indicates that there is a generic error with an instance of {@link IProviderModule}. */\nexport class InjectionProviderModuleError extends Error {\n override name = InjectionProviderModuleError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(`{ProviderModule.${module.toString()}} => ${message}`);\n }\n}\n","import { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an invokation of a disposed module. */\nexport class InjectionProviderModuleDisposedError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleDisposedError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'Has been disposed! You can re-initialize it by using the `_lazyInit` method.');\n }\n}\n","import type { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/**\n * Exception which indicates that an instance of {@link IProviderModule}\n * imports another module which dynamically exports its providers/modules and\n * is trying to dynamically export more or different providers/modules than the\n * ones declared into its static exports.\n */\nexport class InjectionDynamicExportsOutOfRange extends InjectionProviderModuleError {\n override name = InjectionDynamicExportsOutOfRange.name;\n\n constructor(module: IProviderModule) {\n super(\n module,\n `The 'ProviderModule.${module.toString()}' is trying to dynamically export providers/modules out of the declared range of the static exports!`\n );\n }\n}\n","import { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates that a module has been initialized without an `identifier`. */\nexport class InjectionProviderModuleMissingIdentifierError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleMissingIdentifierError.name;\n\n constructor(module: IProviderModule) {\n super(module, 'An `identifier` must be supplied!');\n }\n}\n","import { Container } from 'inversify';\n\n/**\n * The low-level App Container.\n *\n * **Internally used, please use the `AppModule` to interact with it.**\n */\nexport const GlobalContainer = new Container({\n defaultScope: 'Singleton',\n});\n","import {\r\n Container,\r\n type BindingActivation,\r\n type BindingDeactivation,\r\n type BindToFluentSyntax,\r\n type GetOptions,\r\n type IsBoundOptions,\r\n} from 'inversify';\r\n\r\nimport { InjectionScope } from '../enums';\r\nimport {\r\n InjectionDynamicExportsOutOfRange,\r\n InjectionProviderModuleDisposedError,\r\n InjectionProviderModuleError,\r\n InjectionProviderModuleMissingIdentifierError,\r\n} from '../errors';\r\nimport { injectionScopeToBindingScope, isPlainObject, ProviderModuleHelpers, ProviderTokenHelpers } from '../helpers';\r\nimport type {\r\n CloneParams,\r\n DependencyProvider,\r\n IProviderModule,\r\n IProviderModuleNaked,\r\n LazyInitOptions,\r\n ProviderModuleGetManyParam,\r\n ProviderModuleGetManySignature,\r\n ProviderModuleOptions,\r\n ProviderModuleOptionsInternal,\r\n ProviderToken,\r\n RegisteredBindingSideEffects,\r\n StaticExports,\r\n} from '../types';\r\nimport { ProviderModuleUtils } from '../utils';\r\nimport { GlobalContainer } from './global-container';\r\n\r\n/**\r\n * Modules are highly recommended as an effective way to organize your components.\r\n * For most applications, you'll likely have multiple modules, each encapsulating a closely related set of capabilities.\r\n *\r\n * _See {@link ProviderModuleOptions | ProviderModuleOptions}_.\r\n *\r\n * @example\r\n * ```ts\r\n * const EngineModule = new ProviderModule({\r\n * identifier: Symbol('EngineModule'),\r\n * providers: [EngineService],\r\n * exports: [EngineService]\r\n * });\r\n *\r\n * const DashboardModule = new ProviderModule({\r\n * identifier: Symbol('DashboardModule'),\r\n * providers: [DashboardService],\r\n * exports: [DashboardService]\r\n * });\r\n *\r\n * const CarModule = new ProviderModule({\r\n * identifier: Symbol('CarModule'),\r\n * imports: [EngineModule, DashboardModule],\r\n * providers: [CarService],\r\n * exports: [CarService]\r\n * });\r\n *\r\n * // Run-time class replacement:\r\n * const RedCarModule = new ProviderModule({\r\n * identifier: Symbol('RedCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useClass: RedCarService,\r\n * }\r\n * ],\r\n * });\r\n *\r\n * // Run-time factory example:\r\n * const BlackCarModule = new ProviderModule({\r\n * identifier: Symbol('BlackCarModule'),\r\n * imports: [CarModule],\r\n * providers: [\r\n * {\r\n * provide: CarService,\r\n * useFactory: (carService: CarService) => {\r\n * carService.setColor('black');\r\n *\r\n * return carService;\r\n * },\r\n * inject: [CarService]\r\n * }\r\n * ],\r\n * });\r\n * ```\r\n */\r\nexport class ProviderModule implements IProviderModule {\r\n readonly identifier: symbol;\r\n readonly isDisposed: boolean = false;\r\n\r\n protected readonly isAppModule: boolean;\r\n protected readonly container!: Container;\r\n protected readonly defaultScope!: IProviderModuleNaked['defaultScope'];\r\n protected readonly dynamicExports: IProviderModuleNaked['dynamicExports'];\r\n protected readonly onReady: IProviderModuleNaked['onReady'];\r\n protected readonly onDispose: IProviderModuleNaked['onDispose'];\r\n protected readonly importedProvidersMap: IProviderModuleNaked['importedProvidersMap'];\r\n protected readonly moduleUtils!: IProviderModuleNaked['moduleUtils'];\r\n protected readonly imports!: IProviderModuleNaked['imports'];\r\n protected readonly providers!: IProviderModuleNaked['providers'];\r\n protected readonly importedProviders!: IProviderModuleNaked['importedProviders'];\r\n protected readonly exports!: IProviderModuleNaked['exports'];\r\n\r\n private readonly registeredBindingSideEffects!: RegisteredBindingSideEffects;\r\n\r\n constructor({\r\n identifier,\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: ProviderModuleOptions) {\r\n const internalParams = _internalParams as ProviderModuleOptionsInternal;\r\n\r\n // The module id once set should never be changed!\r\n this.identifier = this.setIdentifier(identifier);\r\n this.isDisposed = internalParams.isDisposed ?? false;\r\n // Same goes for the `isAppModule`.\r\n this.isAppModule = internalParams.isAppModule ?? false;\r\n\r\n // If this module is the `AppModule`,\r\n // the initialization will be done when the `IProviderModuleNaked._lazyInit` method is invoked.\r\n if (this.isAppModule) return;\r\n\r\n this._lazyInit({\r\n imports,\r\n providers,\r\n exports,\r\n defaultScope,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams,\r\n });\r\n }\r\n\r\n get<T>(provider: ProviderToken<T>, isOptional?: boolean): T {\r\n return this.__get(provider, { optional: isOptional ?? false });\r\n }\r\n\r\n getMany<D extends (ProviderModuleGetManyParam<any> | ProviderToken)[]>(\r\n ...deps: D | unknown[]\r\n ): ProviderModuleGetManySignature<D> {\r\n return (deps as D).map((dep) => {\r\n const withOptions = isPlainObject(dep) && 'provider' in dep;\r\n\r\n return this.get(withOptions ? dep.provider : dep, withOptions ? dep.isOptional : false);\r\n }) as any;\r\n }\r\n\r\n onActivationEvent<T>(provider: ProviderToken<T>, cb: BindingActivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onActivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n onDeactivationEvent<T>(provider: ProviderToken<T>, cb: BindingDeactivation<T>): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.onDeactivation(ProviderTokenHelpers.toServiceIdentifier(provider), cb);\r\n }\r\n\r\n toNaked(): IProviderModuleNaked {\r\n return this as any;\r\n }\r\n\r\n clone(options?: CloneParams): IProviderModule {\r\n let providers = [...this.providers];\r\n\r\n if (options?.providersMap) {\r\n providers = providers.map((provider) => options.providersMap!(provider, this));\r\n }\r\n\r\n return new ProviderModule(\r\n ProviderModuleHelpers.buildInternalConstructorParams({\r\n isAppModule: this.isAppModule,\r\n identifier: this.identifier,\r\n defaultScope: this.defaultScope.native,\r\n dynamicExports: this.dynamicExports,\r\n onReady: this.onReady,\r\n onDispose: this.onDispose,\r\n importedProvidersMap: options?.importedProvidersMap,\r\n imports: [...this.imports],\r\n providers,\r\n exports: [...this.exports],\r\n })\r\n );\r\n }\r\n\r\n toString(): string {\r\n return this.identifier?.description ?? 'Unknown';\r\n }\r\n\r\n private setIdentifier(identifier: symbol): symbol {\r\n if (!identifier) throw new InjectionProviderModuleMissingIdentifierError(this);\r\n\r\n return identifier;\r\n }\r\n\r\n private prepareContainer(params: ProviderModuleOptionsInternal): Container {\r\n if (this.isAppModule) {\r\n return params.container?.() ?? GlobalContainer;\r\n } else if (params.container) {\r\n console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`);\r\n\r\n return params.container();\r\n } else {\r\n return new Container({\r\n parent: GlobalContainer,\r\n defaultScope: this.defaultScope.inversify,\r\n });\r\n }\r\n }\r\n\r\n private injectImportedModules(modules?: IProviderModuleNaked[]): void {\r\n if (!modules || modules.length === 0) return;\r\n\r\n modules.forEach((module) => {\r\n if (module.toString() === 'GlobalAppModule') {\r\n throw new InjectionProviderModuleError(this, `The 'GlobalAppModule' can't be imported!`);\r\n }\r\n\r\n const moduleStaticExports = module._getExportableModulesAndProviders();\r\n const moduleDynamicExports = module.dynamicExports?.(this, moduleStaticExports);\r\n const moduleHasDynamicExports = moduleDynamicExports !== undefined;\r\n\r\n if (moduleHasDynamicExports) {\r\n this.shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module,\r\n moduleStaticExports,\r\n moduleDynamicExports\r\n );\r\n }\r\n\r\n (moduleDynamicExports ?? moduleStaticExports).forEach((exportable) => {\r\n if (exportable instanceof ProviderModule) {\r\n const exportableModule = exportable.toNaked();\r\n\r\n // The current item of the `exports` array is actually\r\n // another ProviderModule, therefore we must recursively drill into it\r\n // to import its exported modules/providers.\r\n this.injectImportedModules([exportableModule]);\r\n\r\n return;\r\n }\r\n\r\n const provider = exportable as DependencyProvider;\r\n const importedProvider = this.importedProvidersMap!(\r\n {\r\n scope: ProviderTokenHelpers.getInjectionScopeByPriority(provider, module.defaultScope.native),\r\n provide: ProviderTokenHelpers.toServiceIdentifier(provider),\r\n useFactory: () => module.get(provider),\r\n // As we are using a factory token, there is no need to include the `onEvent` and `when` properties\r\n // into the processed `ProviderToken` created for this imported provider,\r\n // because the `importedModule.get` invokation will\r\n // fire the `onEvent` and `when` properties of the original imported provider.\r\n },\r\n provider,\r\n module\r\n );\r\n\r\n this.importedProviders.set(module, [...(this.importedProviders.get(module) ?? []), importedProvider]);\r\n\r\n this.moduleUtils.bindToContainer(importedProvider, module.defaultScope.native);\r\n\r\n // Let's make sure that when the parent module unbinds the provider\r\n // this module unbinds it aswell.\r\n module._onUnbind(provider, () => this.__unbind(importedProvider));\r\n });\r\n });\r\n }\r\n\r\n private injectProviders(): void {\r\n this.providers.forEach((provider) => this.moduleUtils.bindToContainer(provider, this.defaultScope.native));\r\n }\r\n\r\n private registerBindingSideEffect(\r\n provider: ProviderToken,\r\n on: 'bind' | 'rebind' | 'unbind',\r\n cb: () => Promise<void> | void\r\n ): void {\r\n if (!this.registeredBindingSideEffects.has(provider)) {\r\n this.registeredBindingSideEffects.set(provider, {\r\n onBindEffects: [],\r\n onRebindEffects: [],\r\n onUnbindEffects: [],\r\n });\r\n }\r\n\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider)!;\r\n\r\n if (on === 'bind') {\r\n providerBindingSideEffects.onBindEffects.push(cb);\r\n } else if (on === 'rebind') {\r\n providerBindingSideEffects.onRebindEffects.push(cb);\r\n } else {\r\n providerBindingSideEffects.onUnbindEffects.push(cb);\r\n }\r\n }\r\n\r\n private invokeRegisteredBindingSideEffects(provider: ProviderToken, event: 'onBind' | 'onRebind' | 'onUnbind'): void {\r\n const providerBindingSideEffects = this.registeredBindingSideEffects.get(provider);\r\n /* istanbul ignore next */\r\n if (!providerBindingSideEffects) return;\r\n\r\n providerBindingSideEffects[`${event}Effects`].forEach((cb) => cb());\r\n }\r\n\r\n private removeRegisteredBindingSideEffects(provider: ProviderToken | 'all'): void {\r\n /* istanbul ignore next */\r\n if (!this.registeredBindingSideEffects) return;\r\n\r\n if (provider === 'all') {\r\n this.registeredBindingSideEffects.forEach(({ onUnbindEffects }) => onUnbindEffects.forEach((cb) => cb()));\r\n\r\n return;\r\n }\r\n\r\n if (!this.registeredBindingSideEffects.has(provider)) return;\r\n\r\n this.registeredBindingSideEffects.get(provider)?.onUnbindEffects.forEach((cb) => cb());\r\n this.registeredBindingSideEffects.delete(provider);\r\n }\r\n\r\n private shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(\r\n module: IProviderModuleNaked,\r\n staticExports: StaticExports,\r\n dynamicExports: StaticExports\r\n ): void {\r\n if (\r\n dynamicExports.length > staticExports.length ||\r\n dynamicExports.some((dynamicExport) => !staticExports.includes(dynamicExport))\r\n ) {\r\n throw new InjectionDynamicExportsOutOfRange(module);\r\n }\r\n }\r\n\r\n private shouldThrowIfDisposed(): void {\r\n if (this.container !== null) return;\r\n\r\n throw new InjectionProviderModuleDisposedError(this);\r\n }\r\n\r\n //#region IProviderModuleNaked methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._dispose}.\r\n */\r\n protected async _dispose(): Promise<void> {\r\n await this.onDispose?.(this);\r\n await this.__unbindAll();\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = null;\r\n //@ts-expect-error Read-only property.\r\n this.imports = null;\r\n //@ts-expect-error Read-only property.\r\n this.providers = null;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = null;\r\n //@ts-expect-error Read-only property.\r\n this.exports = null;\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = null;\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = null;\r\n\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = true;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._lazyInit}.\r\n */\r\n protected _lazyInit({\r\n imports = [],\r\n providers = [],\r\n exports = [],\r\n defaultScope = InjectionScope.Singleton,\r\n dynamicExports,\r\n onReady,\r\n onDispose,\r\n ..._internalParams\r\n }: LazyInitOptions): IProviderModule {\r\n //@ts-expect-error Read-only property.\r\n this.isDisposed = false;\r\n //@ts-expect-error Read-only property.\r\n this.imports = imports;\r\n //@ts-expect-error Read-only property.\r\n this.providers = providers;\r\n //@ts-expect-error Read-only property.\r\n this.importedProviders = _internalParams.importedProviders ?? new Map();\r\n //@ts-expect-error Read-only property.\r\n this.exports = exports;\r\n //@ts-expect-error Read-only property.\r\n this.defaultScope = { native: defaultScope, inversify: injectionScopeToBindingScope(defaultScope) };\r\n //@ts-expect-error Read-only property.\r\n this.dynamicExports = dynamicExports;\r\n //@ts-expect-error Read-only property.\r\n this.onReady = onReady;\r\n //@ts-expect-error Read-only property.\r\n this.onDispose = onDispose;\r\n //@ts-expect-error Read-only propery.\r\n this.importedProvidersMap = _internalParams.importedProvidersMap ?? ((provider) => provider);\r\n\r\n //@ts-expect-error Read-only property.\r\n this.container = this.prepareContainer({ ..._internalParams });\r\n //@ts-expect-error Read-only property.\r\n this.moduleUtils = new ProviderModuleUtils(this);\r\n //@ts-expect-error Read-only property.\r\n this.registeredBindingSideEffects = new Map();\r\n\r\n this.injectImportedModules(this._getImportedModules());\r\n this.injectProviders();\r\n\r\n this.onReady?.(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getImportedModules}.\r\n */\r\n protected _getImportedModules(): IProviderModuleNaked[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.imports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getProviders}.\r\n */\r\n protected _getProviders(): DependencyProvider[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.providers;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._getExportableModulesAndProviders}.\r\n */\r\n protected _getExportableModulesAndProviders(): StaticExports {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.exports;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onBind}.\r\n */\r\n protected _onBind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'bind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onRebind}.\r\n */\r\n protected _onRebind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'rebind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._onUnbind}.\r\n */\r\n protected _onUnbind<T>(provider: ProviderToken<T>, cb: () => Promise<void> | void): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.registerBindingSideEffect(provider, 'unbind', cb);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked._overwriteContainer}.\r\n */\r\n protected _overwriteContainer(cb: () => Container): void {\r\n //@ts-expect-error Read-only property.\r\n this.container = cb();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region InversifyJS Container native methods\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__bind}.\r\n */\r\n /* istanbul ignore next */\r\n protected __bind<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onBind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__get}.\r\n */\r\n /* istanbul ignore next */\r\n protected __get<T>(provider: ProviderToken<T>, options?: GetOptions): T {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.get(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected __getAll<T>(provider: ProviderToken<T>, options?: GetOptions): T[] {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAll(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__getAllAsync}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __getAllAsync<T>(provider: ProviderToken<T>, options?: GetOptions): Promise<T[]> {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.getAllAsync(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__isCurrentBound}.\r\n */\r\n /* istanbul ignore next */\r\n protected __isCurrentBound(provider: ProviderToken, options?: IsBoundOptions): boolean {\r\n this.shouldThrowIfDisposed();\r\n\r\n return this.container.isCurrentBound(ProviderTokenHelpers.toServiceIdentifier(provider), options);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__takeSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __takeSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.snapshot();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__restoreSnapshot}.\r\n */\r\n /* istanbul ignore next */\r\n protected __restoreSnapshot(): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.restore();\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __rebind<T>(provider: ProviderToken<T>): Promise<BindToFluentSyntax<T>> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = await this.container.rebind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__rebindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __rebindSync<T>(provider: ProviderToken<T>): BindToFluentSyntax<T> {\r\n this.shouldThrowIfDisposed();\r\n\r\n const binding = this.container.rebindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.invokeRegisteredBindingSideEffects(provider, 'onRebind');\r\n\r\n return binding;\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbind}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbind(provider: ProviderToken): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbind(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindSync}.\r\n */\r\n /* istanbul ignore next */\r\n protected __unbindSync(provider: ProviderToken): void {\r\n this.shouldThrowIfDisposed();\r\n\r\n this.container.unbindSync(ProviderTokenHelpers.toServiceIdentifier(provider));\r\n\r\n this.removeRegisteredBindingSideEffects(provider);\r\n }\r\n\r\n /**\r\n * **Publicly visible when the instance is casted to {@link IProviderModuleNaked}.**\r\n *\r\n * See {@link IProviderModuleNaked.__unbindAll}.\r\n */\r\n /* istanbul ignore next */\r\n protected async __unbindAll(): Promise<void> {\r\n this.shouldThrowIfDisposed();\r\n\r\n await this.container.unbindAll();\r\n\r\n this.removeRegisteredBindingSideEffects('all');\r\n }\r\n\r\n //#endregion\r\n}\r\n","import type { BindInWhenOnFluentSyntax, BindOnFluentSyntax, BindWhenOnFluentSyntax, Container } from 'inversify';\n\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderOptions,\n ProviderToken,\n ProviderValueToken,\n} from '../types';\n\n/**\n * Class containing an internal set of `utils`.\n *\n * Each {@link IProviderModuleNaked.moduleUtils | ProviderModule} instance has its own {@link ProviderModuleUtils} property instance.\n */\nexport class ProviderModuleUtils {\n /** The low-level InversifyJS {@link Container} owned by {@link ProviderModuleUtils.module | module}. */\n get container(): Container {\n return this.moduleNaked.container;\n }\n\n /** The parent {@link IProviderModule | ProviderModule} of `this` instance. */\n readonly module: IProviderModule;\n readonly moduleNaked: IProviderModuleNaked;\n\n constructor(module: IProviderModule) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n }\n\n /**\n * Low-level method which can be used to manually register _(bind)_ a new {@link provider} into the {@link ProviderModuleUtils.module | module} container.\n *\n * **Note:** _You shouldn't directly use this to register providers as they will not appear_\n * _into the module's `imports` and `exports` arrays! Therefore leading to unexpected bugs and confusion!_\n *\n * @param provider The {@link ProviderToken | provider} to register.\n * @param defaultScope Optionally provide the default {@link InjectionScope} to use when applicable.\n * @returns `true` when the {@link provider} has been bound otherwhise `false`.\n */\n bindToContainer<T>(provider: DependencyProvider<T>, defaultScope: InjectionScope): boolean {\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) {\n return this.bindSelfTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isClassToken(provider)) {\n return this.bindClassTokenToContainer(provider, defaultScope);\n } else if (ProviderTokenHelpers.isValueToken(provider)) {\n return this.bindValueTokenToContainer(provider);\n } else if (ProviderTokenHelpers.isFactoryToken(provider)) {\n return this.bindFactoryTokenToContainer(provider, defaultScope);\n }\n\n return false;\n }\n\n private bindSelfTokenToContainer<T>(provider: ProviderIdentifier<T>, defaultScope: InjectionScope): boolean {\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toSelf(),\n defaultScope\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindClassTokenToContainer<T>(provider: ProviderClassToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).to(provider.useClass),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindValueTokenToContainer<T>(provider: ProviderValueToken<T>): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.container.bind(ProviderTokenHelpers.toServiceIdentifier(provider)).toConstantValue(provider.useValue)\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n private bindFactoryTokenToContainer<T>(provider: ProviderFactoryToken<T>, defaultScope: InjectionScope): boolean {\n this.setBindingOnEvent(\n provider,\n this.setWhenBinding(\n provider,\n this.setBindingScope(\n provider,\n this.container\n .bind(ProviderTokenHelpers.toServiceIdentifier(provider))\n .toResolvedValue(provider.useFactory, ProviderTokenHelpers.toServiceIdentifiers(provider.inject ?? [])),\n defaultScope\n )\n )\n );\n\n return this.moduleNaked.__isCurrentBound(provider);\n }\n\n /** Sets the {@link InjectionScope} of a bound {@link provider}. */\n private setBindingScope<T>(\n provider: ProviderToken<T>,\n binding: BindInWhenOnFluentSyntax<T>,\n defaultScope: InjectionScope\n ): BindWhenOnFluentSyntax<T> {\n // A constant token will always be a singleton.\n if (ProviderTokenHelpers.isValueToken(provider)) return binding;\n\n const injectionScope = ProviderTokenHelpers.getInjectionScopeByPriority(provider, defaultScope);\n\n switch (injectionScope) {\n case InjectionScope.Singleton:\n return binding.inSingletonScope();\n case InjectionScope.Transient:\n return binding.inTransientScope();\n case InjectionScope.Request:\n return binding.inRequestScope();\n }\n }\n\n /** Sets the `when` clause of a bound {@link provider}. */\n private setWhenBinding<T>(\n provider: ProviderToken<T>,\n binding: BindWhenOnFluentSyntax<T>\n ): BindOnFluentSyntax<unknown> {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return binding;\n\n const when = (provider as ProviderOptions<unknown>).when;\n if (!when) return binding;\n\n return binding.when(when);\n }\n\n /** Sets the `activation` and `deactivation` events of a bound {@link provider}. */\n private setBindingOnEvent(provider: ProviderToken, binding: BindOnFluentSyntax<any>): void {\n // A `ProviderIdentifier` has no options.\n if (ProviderTokenHelpers.isProviderIdentifier(provider)) return;\n\n const opts = provider as ProviderOptions<unknown>;\n\n if (opts.onEvent?.activation) {\n binding.onActivation(opts.onEvent.activation);\n }\n\n if (opts.onEvent?.deactivation) {\n binding.onDeactivation(opts.onEvent.deactivation);\n }\n }\n}\n","import { InjectionError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { ProviderModule } from './provider-module';\n\n/**\n * Class of the {@link AppModule} instance.\n *\n * **You shouldn't initialize a new instance of this class, please use the {@link AppModule} instance!**\n */\nexport class GlobalAppModule extends ProviderModule implements IAppModule {\n private nakedModule = this as unknown as IProviderModuleNaked;\n private isLoaded = false;\n\n constructor() {\n super(\n ProviderModuleHelpers.buildInternalConstructorParams({\n identifier: Symbol(GLOBAL_APP_MODULE_ID),\n isAppModule: true,\n })\n );\n }\n\n register<AsNaked extends boolean = false>(\n options: AppModuleOptions\n ): AsNaked extends false ? IAppModule : IAppModule & IProviderModuleNaked {\n if (this.isLoaded) {\n throw new InjectionError(`The '${this.toString()}' has already been registered!`);\n }\n\n this.nakedModule._lazyInit(options);\n\n this.isLoaded = true;\n\n return this as any;\n }\n\n /* istanbul ignore next */\n override toNaked(): IAppModule & IProviderModuleNaked {\n return super.toNaked() as any;\n }\n\n protected override async _dispose(): Promise<void> {\n this.isLoaded = false;\n\n super._dispose();\n }\n}\n\n/**\n * Special instance of {@link ProviderModule} which acts as the global module of your application in which you can inject any provider\n * which must be available through your entire application.\n *\n * The registered providers will automatically be available inside all the modules.\n *\n * @example\n * ```ts\n * // The `register` method must be invoked only once during your application life cycle!\n * AppModule.register({\n * imports: [ConfigModule, ApiModule, UserModule, DatabaseModule],\n * providers: [DummyService],\n * });\n * ```\n */\nexport const AppModule = new GlobalAppModule();\n"],"mappings":"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","names":["GLOBAL_APP_MODULE_ID","injectable","_injectable","InjectionScope","injectionScopeToBindingScope","injectionScope","InjectionScope","Singleton","Transient","Request","bindingScopeToInjectionScope","bindingScope","getClassMetadata","isClass","v","Function","prototype","toString","call","startsWith","isClassOrFunction","value","isFunction","v","Function","prototype","toString","call","startsWith","isObject","o","Object","prototype","toString","call","isPlainObject","ctor","constructor","undefined","prot","hasOwnProperty","ProviderTokenHelpers","isClassToken","provider","hasProvideProperty","isValueToken","isFactoryToken","isProviderIdentifier","value","isClassOrFunction","toServiceIdentifier","provide","toServiceIdentifiers","providers","map","toDependencyProviderWithOptions","original","override","isClass","useClass","isFunction","useFactory","getInjectionScopeByPriority","moduleDefaultScope","tryGetScopeFromProvider","tryGetDecoratorScopeFromClass","tryGetProviderOptions","providerOptions","scope","providerClass","inversifyScope","getClassMetadata","bindingScopeToInjectionScope","isPlainObject","ProviderModuleHelpers","buildInternalConstructorParams","params","isDynamicExport","exporter","Array","isArray","Injectable","scope","undefined","_injectable","injectionScopeToBindingScope","inject","_inject","Inject","provider","_inject","ProviderTokenHelpers","toServiceIdentifier","multiInject","_multiInject","MultiInject","provider","_multiInject","ProviderTokenHelpers","toServiceIdentifier","injectFromBase","_injectFromBase","InjectFromBase","options","_injectFromBase","named","_named","Named","name","_named","optional","_optional","Optional","_optional","postConstruct","_postConstruct","PostConstruct","_postConstruct","preDestroy","_preDestroy","PreDestroy","_preDestroy","tagged","_tagged","Tagged","key","value","_tagged","unmanaged","_unmanaged","Unmanaged","_unmanaged","InjectionError","Error","name","InjectionProviderModuleError","Error","name","constructor","module","message","toString","InjectionProviderModuleDisposedError","InjectionProviderModuleError","name","constructor","module","InjectionDynamicExportsOutOfRange","InjectionProviderModuleError","name","constructor","module","toString","InjectionProviderModuleMissingIdentifierError","InjectionProviderModuleError","name","constructor","module","Container","GlobalContainer","defaultScope","Container","ProviderModuleUtils","container","moduleNaked","module","constructor","toNaked","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","setBindingScope","bind","toServiceIdentifier","toSelf","__isCurrentBound","setBindingOnEvent","setWhenBinding","to","useClass","toConstantValue","useValue","toResolvedValue","useFactory","toServiceIdentifiers","inject","binding","injectionScope","getInjectionScopeByPriority","InjectionScope","Singleton","inSingletonScope","Transient","inTransientScope","Request","inRequestScope","when","opts","onEvent","activation","onActivation","deactivation","onDeactivation","ProviderModule","identifier","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","_internalParams","internalParams","setIdentifier","_lazyInit","get","provider","isOptional","__get","optional","getMany","deps","map","dep","withOptions","isPlainObject","onActivationEvent","cb","shouldThrowIfDisposed","onActivation","ProviderTokenHelpers","toServiceIdentifier","onDeactivationEvent","onDeactivation","toNaked","clone","options","providersMap","ProviderModuleHelpers","buildInternalConstructorParams","native","toString","description","InjectionProviderModuleMissingIdentifierError","prepareContainer","params","GlobalContainer","console","warn","Container","parent","inversify","injectImportedModules","modules","length","forEach","module","InjectionProviderModuleError","moduleStaticExports","_getExportableModulesAndProviders","moduleDynamicExports","moduleHasDynamicExports","undefined","shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports","exportable","exportableModule","importedProvider","scope","getInjectionScopeByPriority","provide","useFactory","set","bindToContainer","_onUnbind","__unbind","injectProviders","registerBindingSideEffect","on","has","onBindEffects","onRebindEffects","onUnbindEffects","providerBindingSideEffects","push","invokeRegisteredBindingSideEffects","event","removeRegisteredBindingSideEffects","delete","staticExports","some","dynamicExport","includes","InjectionDynamicExportsOutOfRange","InjectionProviderModuleDisposedError","_dispose","__unbindAll","InjectionScope","Singleton","Map","injectionScopeToBindingScope","ProviderModuleUtils","_getImportedModules","_getProviders","_onBind","_onRebind","_overwriteContainer","__bind","binding","bind","__getAsync","getAsync","__getAll","getAll","__getAllAsync","getAllAsync","__isBound","isBound","__isCurrentBound","isCurrentBound","__takeSnapshot","snapshot","__restoreSnapshot","restore","__rebind","rebind","__rebindSync","rebindSync","unbind","__unbindSync","unbindSync","unbindAll","GlobalAppModule","ProviderModule","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","InjectionError","toString","_lazyInit","toNaked","_dispose","AppModule"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@adimm/x-injection",
3
3
  "description": "Powerful IoC library built on-top of InversifyJS inspired by NestJS's DI.",
4
- "version": "0.5.0",
4
+ "version": "0.5.2",
5
5
  "author": "Adi-Marian Mutu",
6
6
  "homepage": "https://github.com/AdiMarianMutu/x-injection#readme",
7
7
  "bugs": "https://github.com/AdiMarianMutu/x-injection/issues",