@adimm/x-injection 0.6.3 → 0.6.5
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 +4 -4
- package/dist/index.cjs +31 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +44 -42
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<h1 align="center">
|
|
2
|
-
xInjection <a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank"
|
|
3
|
-
<img src="https://badgen.net/npm/license/@adimm/x-injection"
|
|
4
|
-
<a href="https://app.codecov.io/gh/AdiMarianMutu/x-injection" target="__blank"
|
|
2
|
+
xInjection <a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank"><img src="https://badgen.net/npm/v/@adimm/x-injection"></a>
|
|
3
|
+
<img src="https://badgen.net/npm/license/@adimm/x-injection">
|
|
4
|
+
<a href="https://app.codecov.io/gh/AdiMarianMutu/x-injection" target="__blank"><img src="https://badgen.net/codecov/c/github/AdiMarianMutu/x-injection"></a>
|
|
5
5
|
</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
@@ -9,7 +9,7 @@ xInjection <a href="https://www.npmjs.com/package/@adimm/x-injection" targe
|
|
|
9
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>
|
|
10
10
|
<br>
|
|
11
11
|
<img src="https://badgen.net/bundlephobia/minzip/@adimm/x-injection">
|
|
12
|
-
<a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank"
|
|
12
|
+
<a href="https://www.npmjs.com/package/@adimm/x-injection" target="__blank"><img src="https://badgen.net/npm/dm/@adimm/x-injection"></a>
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
## Table of Contents
|
package/dist/index.cjs
CHANGED
|
@@ -17,7 +17,7 @@ var e, i = Object.defineProperty, t = Object.getOwnPropertyDescriptor, n = Objec
|
|
|
17
17
|
GlobalContainer: () => $,
|
|
18
18
|
Inject: () => E,
|
|
19
19
|
InjectFromBase: () => w,
|
|
20
|
-
Injectable: () =>
|
|
20
|
+
Injectable: () => b,
|
|
21
21
|
InjectionDynamicExportsOutOfRange: () => V,
|
|
22
22
|
InjectionError: () => q,
|
|
23
23
|
InjectionProviderModuleDisposedError: () => U,
|
|
@@ -25,9 +25,9 @@ var e, i = Object.defineProperty, t = Object.getOwnPropertyDescriptor, n = Objec
|
|
|
25
25
|
InjectionProviderModuleGlobalMarkError: () => L,
|
|
26
26
|
InjectionProviderModuleMissingIdentifierError: () => W,
|
|
27
27
|
InjectionScope: () => c,
|
|
28
|
-
MultiInject: () =>
|
|
29
|
-
Named: () =>
|
|
30
|
-
Optional: () =>
|
|
28
|
+
MultiInject: () => T,
|
|
29
|
+
Named: () => k,
|
|
30
|
+
Optional: () => D,
|
|
31
31
|
PostConstruct: () => A,
|
|
32
32
|
PreDestroy: () => x,
|
|
33
33
|
ProviderModule: () => Y,
|
|
@@ -110,7 +110,7 @@ function y(e) {
|
|
|
110
110
|
return !1 !== S(t) && !1 !== t.hasOwnProperty("isPrototypeOf");
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
function
|
|
113
|
+
function b(e) {
|
|
114
114
|
return void 0 === e ? (0, a.injectable)() : (0, a.injectable)(u(e));
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -183,23 +183,23 @@ o(y, "isPlainObject"), function(e) {
|
|
|
183
183
|
}
|
|
184
184
|
o(i, "buildInternalConstructorParams"), e.buildInternalConstructorParams = i, o(t, "isDynamicExport"),
|
|
185
185
|
e.isDynamicExport = t;
|
|
186
|
-
}(p || (p = {})), o(
|
|
186
|
+
}(p || (p = {})), o(b, "Injectable");
|
|
187
187
|
|
|
188
|
-
var
|
|
188
|
+
var I = require("inversify");
|
|
189
189
|
|
|
190
190
|
function E(e) {
|
|
191
|
-
return (0,
|
|
191
|
+
return (0, I.inject)(h.toServiceIdentifier(e));
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
o(E, "Inject");
|
|
195
195
|
|
|
196
|
-
var
|
|
196
|
+
var M = require("inversify");
|
|
197
197
|
|
|
198
|
-
function
|
|
199
|
-
return (0,
|
|
198
|
+
function T(e) {
|
|
199
|
+
return (0, M.multiInject)(h.toServiceIdentifier(e));
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
o(
|
|
202
|
+
o(T, "MultiInject");
|
|
203
203
|
|
|
204
204
|
var P = require("inversify");
|
|
205
205
|
|
|
@@ -211,19 +211,19 @@ o(w, "InjectFromBase");
|
|
|
211
211
|
|
|
212
212
|
var _ = require("inversify");
|
|
213
213
|
|
|
214
|
-
function
|
|
214
|
+
function k(e) {
|
|
215
215
|
return (0, _.named)(e);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
o(
|
|
218
|
+
o(k, "Named");
|
|
219
219
|
|
|
220
|
-
var
|
|
220
|
+
var B = require("inversify");
|
|
221
221
|
|
|
222
|
-
function
|
|
223
|
-
return (0,
|
|
222
|
+
function D() {
|
|
223
|
+
return (0, B.optional)();
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
o(
|
|
226
|
+
o(D, "Optional");
|
|
227
227
|
|
|
228
228
|
var j = require("inversify");
|
|
229
229
|
|
|
@@ -304,7 +304,7 @@ var q = class e extends Error {
|
|
|
304
304
|
}
|
|
305
305
|
}, $ = new (require("inversify").Container)({
|
|
306
306
|
defaultScope: "Singleton"
|
|
307
|
-
}),
|
|
307
|
+
}), H = require("inversify"), z = class {
|
|
308
308
|
static {
|
|
309
309
|
o(this, "ProviderModuleUtils");
|
|
310
310
|
}
|
|
@@ -422,6 +422,7 @@ var q = class e extends Error {
|
|
|
422
422
|
let t = [ ...this.providers ];
|
|
423
423
|
return i?.providersMap && (t = t.map((e => i.providersMap(e, this)))), new e(p.buildInternalConstructorParams({
|
|
424
424
|
isAppModule: this.isAppModule,
|
|
425
|
+
markAsGlobal: this.isMarkedAsGlobal,
|
|
425
426
|
identifier: this.identifier,
|
|
426
427
|
defaultScope: this.defaultScope.native,
|
|
427
428
|
dynamicExports: this.dynamicExports,
|
|
@@ -442,7 +443,7 @@ var q = class e extends Error {
|
|
|
442
443
|
}
|
|
443
444
|
prepareContainer(e) {
|
|
444
445
|
return this.isAppModule ? e.container?.() ?? $ : e.container ? (console.warn(`[xInjection]: The '${this.toString()}' module is using a dynamic container!`),
|
|
445
|
-
e.container()) : new
|
|
446
|
+
e.container()) : new H.Container({
|
|
446
447
|
parent: $,
|
|
447
448
|
defaultScope: this.defaultScope.inversify
|
|
448
449
|
});
|
|
@@ -507,7 +508,7 @@ var q = class e extends Error {
|
|
|
507
508
|
}, this.dynamicExports = o, this.onReady = s, this.onDispose = d, this.importedProvidersMap = a.importedProvidersMap ?? (e => e),
|
|
508
509
|
this.container = this.prepareContainer({
|
|
509
510
|
...a
|
|
510
|
-
}), this.moduleUtils = new
|
|
511
|
+
}), this.moduleUtils = new z(this, a), this.registeredBindingSideEffects = new Map,
|
|
511
512
|
this.injectImportedModules(this._getImportedModules()), this.injectProviders(),
|
|
512
513
|
this.onReady?.(this), this;
|
|
513
514
|
}
|
|
@@ -586,7 +587,6 @@ var q = class e extends Error {
|
|
|
586
587
|
static {
|
|
587
588
|
o(this, "GlobalAppModule");
|
|
588
589
|
}
|
|
589
|
-
isMarkedAsGlobal=!0;
|
|
590
590
|
nakedModule=this;
|
|
591
591
|
isLoaded=!1;
|
|
592
592
|
constructor() {
|
|
@@ -597,8 +597,8 @@ var q = class e extends Error {
|
|
|
597
597
|
}
|
|
598
598
|
register(e) {
|
|
599
599
|
if (this.isLoaded) throw new q(`The '${this.toString()}' has already been registered!`);
|
|
600
|
-
return this.nakedModule._lazyInit(e), this.
|
|
601
|
-
this;
|
|
600
|
+
return this.nakedModule._lazyInit(e), this.checkIfRegisteredModulesHaveGlobalMark(this.toNaked(), this.imports),
|
|
601
|
+
this.isLoaded = !0, this;
|
|
602
602
|
}
|
|
603
603
|
toNaked() {
|
|
604
604
|
return super.toNaked();
|
|
@@ -606,11 +606,13 @@ var q = class e extends Error {
|
|
|
606
606
|
async _dispose() {
|
|
607
607
|
this.isLoaded = !1, super._dispose();
|
|
608
608
|
}
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
if (
|
|
612
|
-
|
|
613
|
-
|
|
609
|
+
checkIfRegisteredModulesHaveGlobalMark(e, i, t = !1) {
|
|
610
|
+
i.forEach((i => {
|
|
611
|
+
if (i instanceof Y) {
|
|
612
|
+
if (i.isMarkedAsGlobal) return J.delete(i), void (i.exports && this.checkIfRegisteredModulesHaveGlobalMark(i, i.exports, !0));
|
|
613
|
+
throw new L(i, t ? `Is not marked as \`global\` but has been imported into the \`AppModule\`via the \`${e.toString()}\` module!` : "Is not marked as `global` but has been imported into the `AppModule`!");
|
|
614
|
+
}
|
|
615
|
+
})), t || J.forEach((e => {
|
|
614
616
|
throw new L(e, "Is marked as 'global' and has not been imported into the 'AppModule'!");
|
|
615
617
|
}));
|
|
616
618
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -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/errors/provider-module-global-mark.error.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/global-modules-register.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 { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an error with regards to the `markAsGlobal` option. */\nexport class InjectionProviderModuleGlobalMarkError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleGlobalMarkError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(module, message);\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 isMarkedAsGlobal: boolean = false;\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 markAsGlobal,\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 markAsGlobal,\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 markAsGlobal,\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.isMarkedAsGlobal = markAsGlobal ?? false;\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, _internalParams);\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 { AppModule, GlobalModuleRegister } from '../core';\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderModuleOptionsInternal,\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 private readonly appModule = AppModule;\n\n constructor(module: IProviderModule, internalOptions: ProviderModuleOptionsInternal) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n\n this.appModule = internalOptions.appModule?.() ?? this.appModule;\n\n this.checkIfShouldBeAddedToTheGlobalRegister();\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 checkIfShouldBeAddedToTheGlobalRegister(): void {\n if (this.moduleNaked.isAppModule || !this.module.isMarkedAsGlobal) return;\n\n GlobalModuleRegister.add(this.module);\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 type { IProviderModule } from '../types';\n\n/**\n * Each module which uses the `markAsGlobal` marker will\n * register itself into this register.\n *\n * Will then be used by the `AppModule` to make sure that the imported modules\n * are correctly using the global flag option.\n *\n * _Should be empty if all global modules are correctly registered._\n */\nexport const GlobalModuleRegister = new Set<IProviderModule>();\n","import { InjectionError, InjectionProviderModuleGlobalMarkError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { GlobalModuleRegister } from './global-modules-register';\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 override isMarkedAsGlobal = true;\n\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.checkIfImportsHaveGlobalMark();\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 private checkIfImportsHaveGlobalMark(): void {\n this.imports.forEach((imported) => {\n if (imported.isMarkedAsGlobal) {\n GlobalModuleRegister.delete(imported);\n\n return;\n }\n\n throw new InjectionProviderModuleGlobalMarkError(\n imported,\n 'Is not marked as `global` but has been imported into the `AppModule`!'\n );\n });\n\n GlobalModuleRegister.forEach((module) => {\n throw new InjectionProviderModuleGlobalMarkError(\n module,\n `Is marked as 'global' and has not been imported into the 'AppModule'!`\n );\n });\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","InjectionProviderModuleGlobalMarkError","InjectionProviderModuleError","name","constructor","module","message","import_inversify","GlobalContainer","Container","defaultScope","import_inversify","ProviderModuleUtils","container","moduleNaked","module","appModule","AppModule","constructor","internalOptions","toNaked","checkIfShouldBeAddedToTheGlobalRegister","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","isAppModule","isMarkedAsGlobal","GlobalModuleRegister","add","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","isMarkedAsGlobal","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","markAsGlobal","_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","GlobalModuleRegister","Set","GlobalAppModule","ProviderModule","isMarkedAsGlobal","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","InjectionError","toString","_lazyInit","checkIfImportsHaveGlobalMark","toNaked","_dispose","imports","forEach","imported","GlobalModuleRegister","delete","InjectionProviderModuleGlobalMarkError","module","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/errors/provider-module-global-mark.error.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/global-modules-register.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 { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an error with regards to the `markAsGlobal` option. */\nexport class InjectionProviderModuleGlobalMarkError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleGlobalMarkError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(module, message);\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 isMarkedAsGlobal: boolean = false;\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 markAsGlobal,\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 markAsGlobal,\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 markAsGlobal: this.isMarkedAsGlobal,\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 markAsGlobal,\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.isMarkedAsGlobal = markAsGlobal ?? false;\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, _internalParams);\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 { AppModule, GlobalModuleRegister } from '../core';\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderModuleOptionsInternal,\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 private readonly appModule = AppModule;\n\n constructor(module: IProviderModule, internalOptions: ProviderModuleOptionsInternal) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n\n this.appModule = internalOptions.appModule?.() ?? this.appModule;\n\n this.checkIfShouldBeAddedToTheGlobalRegister();\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 checkIfShouldBeAddedToTheGlobalRegister(): void {\n if (this.moduleNaked.isAppModule || !this.module.isMarkedAsGlobal) return;\n\n GlobalModuleRegister.add(this.module);\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 type { IProviderModule } from '../types';\n\n/**\n * Each module which uses the `markAsGlobal` marker will\n * register itself into this register.\n *\n * Will then be used by the `AppModule` to make sure that the imported modules\n * are correctly using the global flag option.\n *\n * _Should be empty if all global modules are correctly registered._\n */\nexport const GlobalModuleRegister = new Set<IProviderModule>();\n","import { InjectionError, InjectionProviderModuleGlobalMarkError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked, StaticExports } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { GlobalModuleRegister } from './global-modules-register';\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.checkIfRegisteredModulesHaveGlobalMark(this.toNaked(), this.imports);\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 private checkIfRegisteredModulesHaveGlobalMark(\n parentModule: IProviderModuleNaked,\n list: StaticExports,\n isSecondaryImport = false\n ): void {\n (list as IProviderModuleNaked[]).forEach((module) => {\n if (!(module instanceof ProviderModule)) return;\n\n if (module.isMarkedAsGlobal) {\n GlobalModuleRegister.delete(module);\n\n // This module may also export other modules\n // which may have been marked as global\n // and not directly imported into the `AppModule`.\n if (module.exports) {\n this.checkIfRegisteredModulesHaveGlobalMark(module, module.exports, true);\n }\n\n return;\n }\n\n throw new InjectionProviderModuleGlobalMarkError(\n module,\n isSecondaryImport\n ? 'Is not marked as `global` but has been imported into the `AppModule`' +\n `via the \\`${parentModule.toString()}\\` module!`\n : 'Is not marked as `global` but has been imported into the `AppModule`!'\n );\n });\n\n if (isSecondaryImport) return;\n\n GlobalModuleRegister.forEach((module) => {\n throw new InjectionProviderModuleGlobalMarkError(\n module,\n `Is marked as 'global' and has not been imported into the 'AppModule'!`\n );\n });\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","InjectionProviderModuleGlobalMarkError","InjectionProviderModuleError","name","constructor","module","message","import_inversify","GlobalContainer","Container","defaultScope","import_inversify","ProviderModuleUtils","container","moduleNaked","module","appModule","AppModule","constructor","internalOptions","toNaked","checkIfShouldBeAddedToTheGlobalRegister","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","isAppModule","isMarkedAsGlobal","GlobalModuleRegister","add","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","isMarkedAsGlobal","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","markAsGlobal","_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","GlobalModuleRegister","Set","GlobalAppModule","ProviderModule","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","InjectionError","toString","_lazyInit","checkIfRegisteredModulesHaveGlobalMark","toNaked","imports","_dispose","parentModule","list","isSecondaryImport","forEach","module","isMarkedAsGlobal","GlobalModuleRegister","delete","exports","InjectionProviderModuleGlobalMarkError","AppModule"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -576,14 +576,13 @@ declare class ProviderModule implements IProviderModule {
|
|
|
576
576
|
* **You shouldn't initialize a new instance of this class, please use the {@link AppModule} instance!**
|
|
577
577
|
*/
|
|
578
578
|
declare class GlobalAppModule extends ProviderModule implements IAppModule {
|
|
579
|
-
isMarkedAsGlobal: boolean;
|
|
580
579
|
private nakedModule;
|
|
581
580
|
private isLoaded;
|
|
582
581
|
constructor();
|
|
583
582
|
register<AsNaked extends boolean = false>(options: AppModuleOptions): AsNaked extends false ? IAppModule : IAppModule & IProviderModuleNaked;
|
|
584
583
|
toNaked(): IAppModule & IProviderModuleNaked;
|
|
585
584
|
protected _dispose(): Promise<void>;
|
|
586
|
-
private
|
|
585
|
+
private checkIfRegisteredModulesHaveGlobalMark;
|
|
587
586
|
}
|
|
588
587
|
/**
|
|
589
588
|
* Special instance of {@link ProviderModule} which acts as the global module of your application in which you can inject any provider
|
|
@@ -633,7 +632,7 @@ interface ProviderModuleOptions {
|
|
|
633
632
|
*
|
|
634
633
|
* Defaults to `false`.
|
|
635
634
|
*/
|
|
636
|
-
markAsGlobal?:
|
|
635
|
+
markAsGlobal?: boolean;
|
|
637
636
|
/**
|
|
638
637
|
* When provided, can be used to control which providers from the {@link ProviderModuleOptions.exports | exports}
|
|
639
638
|
* array should actually be exported into the importing module.
|
package/dist/index.d.ts
CHANGED
|
@@ -576,14 +576,13 @@ declare class ProviderModule implements IProviderModule {
|
|
|
576
576
|
* **You shouldn't initialize a new instance of this class, please use the {@link AppModule} instance!**
|
|
577
577
|
*/
|
|
578
578
|
declare class GlobalAppModule extends ProviderModule implements IAppModule {
|
|
579
|
-
isMarkedAsGlobal: boolean;
|
|
580
579
|
private nakedModule;
|
|
581
580
|
private isLoaded;
|
|
582
581
|
constructor();
|
|
583
582
|
register<AsNaked extends boolean = false>(options: AppModuleOptions): AsNaked extends false ? IAppModule : IAppModule & IProviderModuleNaked;
|
|
584
583
|
toNaked(): IAppModule & IProviderModuleNaked;
|
|
585
584
|
protected _dispose(): Promise<void>;
|
|
586
|
-
private
|
|
585
|
+
private checkIfRegisteredModulesHaveGlobalMark;
|
|
587
586
|
}
|
|
588
587
|
/**
|
|
589
588
|
* Special instance of {@link ProviderModule} which acts as the global module of your application in which you can inject any provider
|
|
@@ -633,7 +632,7 @@ interface ProviderModuleOptions {
|
|
|
633
632
|
*
|
|
634
633
|
* Defaults to `false`.
|
|
635
634
|
*/
|
|
636
|
-
markAsGlobal?:
|
|
635
|
+
markAsGlobal?: boolean;
|
|
637
636
|
/**
|
|
638
637
|
* When provided, can be used to control which providers from the {@link ProviderModuleOptions.exports | exports}
|
|
639
638
|
* array should actually be exported into the importing module.
|
package/dist/index.js
CHANGED
|
@@ -48,27 +48,27 @@ function h(e) {
|
|
|
48
48
|
return "function" == typeof e;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
function
|
|
51
|
+
function l(e) {
|
|
52
52
|
return "function" == typeof e && !Function.prototype.toString.call(e).startsWith("class ");
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
function
|
|
55
|
+
function p(e) {
|
|
56
56
|
return "[object Object]" === Object.prototype.toString.call(e);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
function f(e) {
|
|
60
|
-
if (!1 ===
|
|
60
|
+
if (!1 === p(e)) return !1;
|
|
61
61
|
const i = e.constructor;
|
|
62
62
|
if (void 0 === i) return !0;
|
|
63
63
|
const t = i.prototype;
|
|
64
|
-
return !1 !==
|
|
64
|
+
return !1 !== p(t) && !1 !== t.hasOwnProperty("isPrototypeOf");
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
function v(e) {
|
|
68
68
|
return void 0 === e ? n() : n(d(e));
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
i(u, "isClass"), i(h, "isClassOrFunction"), i(
|
|
71
|
+
i(u, "isClass"), i(h, "isClassOrFunction"), i(l, "isFunction"), i(p, "isObject"),
|
|
72
72
|
i(f, "isPlainObject"), function(e) {
|
|
73
73
|
function t(e) {
|
|
74
74
|
return y(e) && "useClass" in e;
|
|
@@ -88,12 +88,12 @@ i(f, "isPlainObject"), function(e) {
|
|
|
88
88
|
function d(e) {
|
|
89
89
|
return e.map((e => s(e)));
|
|
90
90
|
}
|
|
91
|
-
function
|
|
91
|
+
function p(e, i) {
|
|
92
92
|
return u(e) ? {
|
|
93
93
|
...i,
|
|
94
94
|
provide: i?.provide ?? e,
|
|
95
95
|
useClass: i?.useClass ?? e
|
|
96
|
-
} :
|
|
96
|
+
} : l(e) ? {
|
|
97
97
|
...i,
|
|
98
98
|
provide: i?.provide ?? e,
|
|
99
99
|
useFactory: i?.useFactory ?? e
|
|
@@ -124,7 +124,7 @@ i(f, "isPlainObject"), function(e) {
|
|
|
124
124
|
i(t, "isClassToken"), e.isClassToken = t, i(n, "isValueToken"), e.isValueToken = n,
|
|
125
125
|
i(o, "isFactoryToken"), e.isFactoryToken = o, i(r, "isProviderIdentifier"), e.isProviderIdentifier = r,
|
|
126
126
|
i(s, "toServiceIdentifier"), e.toServiceIdentifier = s, i(d, "toServiceIdentifiers"),
|
|
127
|
-
e.toServiceIdentifiers = d, i(
|
|
127
|
+
e.toServiceIdentifiers = d, i(p, "toDependencyProviderWithOptions"), e.toDependencyProviderWithOptions = p,
|
|
128
128
|
i(v, "getInjectionScopeByPriority"), e.getInjectionScopeByPriority = v, i(m, "tryGetProviderOptions"),
|
|
129
129
|
e.tryGetProviderOptions = m, i(g, "tryGetScopeFromProvider"), e.tryGetScopeFromProvider = g,
|
|
130
130
|
i(S, "tryGetDecoratorScopeFromClass"), e.tryGetDecoratorScopeFromClass = S, i(y, "hasProvideProperty");
|
|
@@ -155,13 +155,13 @@ function y(e) {
|
|
|
155
155
|
|
|
156
156
|
i(y, "MultiInject");
|
|
157
157
|
|
|
158
|
-
import { injectFromBase as
|
|
158
|
+
import { injectFromBase as b } from "inversify";
|
|
159
159
|
|
|
160
|
-
function
|
|
161
|
-
return
|
|
160
|
+
function I(e) {
|
|
161
|
+
return b(e);
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
i(
|
|
164
|
+
i(I, "InjectFromBase");
|
|
165
165
|
|
|
166
166
|
import { named as E } from "inversify";
|
|
167
167
|
|
|
@@ -171,26 +171,26 @@ function T(e) {
|
|
|
171
171
|
|
|
172
172
|
i(T, "Named");
|
|
173
173
|
|
|
174
|
-
import { optional as
|
|
174
|
+
import { optional as M } from "inversify";
|
|
175
175
|
|
|
176
|
-
function
|
|
177
|
-
return
|
|
176
|
+
function k() {
|
|
177
|
+
return M();
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
i(
|
|
180
|
+
i(k, "Optional");
|
|
181
181
|
|
|
182
|
-
import { postConstruct as
|
|
182
|
+
import { postConstruct as w } from "inversify";
|
|
183
183
|
|
|
184
|
-
function
|
|
185
|
-
return
|
|
184
|
+
function _() {
|
|
185
|
+
return w();
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
i(
|
|
188
|
+
i(_, "PostConstruct");
|
|
189
189
|
|
|
190
|
-
import { preDestroy as
|
|
190
|
+
import { preDestroy as B } from "inversify";
|
|
191
191
|
|
|
192
192
|
function D() {
|
|
193
|
-
return
|
|
193
|
+
return B();
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
i(D, "PreDestroy");
|
|
@@ -211,12 +211,12 @@ function x() {
|
|
|
211
211
|
|
|
212
212
|
i(x, "Unmanaged");
|
|
213
213
|
|
|
214
|
-
var
|
|
214
|
+
var R = class e extends Error {
|
|
215
215
|
static {
|
|
216
216
|
i(this, "InjectionError");
|
|
217
217
|
}
|
|
218
218
|
name=e.name;
|
|
219
|
-
},
|
|
219
|
+
}, j = class e extends Error {
|
|
220
220
|
static {
|
|
221
221
|
i(this, "InjectionProviderModuleError");
|
|
222
222
|
}
|
|
@@ -224,7 +224,7 @@ var j = class e extends Error {
|
|
|
224
224
|
constructor(e, i) {
|
|
225
225
|
super(`{ProviderModule.${e.toString()}} => ${i}`);
|
|
226
226
|
}
|
|
227
|
-
}, G = class e extends
|
|
227
|
+
}, G = class e extends j {
|
|
228
228
|
static {
|
|
229
229
|
i(this, "InjectionProviderModuleDisposedError");
|
|
230
230
|
}
|
|
@@ -232,7 +232,7 @@ var j = class e extends Error {
|
|
|
232
232
|
constructor(e) {
|
|
233
233
|
super(e, "Has been disposed! You can re-initialize it by using the `_lazyInit` method.");
|
|
234
234
|
}
|
|
235
|
-
}, F = class e extends
|
|
235
|
+
}, F = class e extends j {
|
|
236
236
|
static {
|
|
237
237
|
i(this, "InjectionDynamicExportsOutOfRange");
|
|
238
238
|
}
|
|
@@ -240,7 +240,7 @@ var j = class e extends Error {
|
|
|
240
240
|
constructor(e) {
|
|
241
241
|
super(e, `The 'ProviderModule.${e.toString()}' is trying to dynamically export providers/modules out of the declared range of the static exports!`);
|
|
242
242
|
}
|
|
243
|
-
}, O = class e extends
|
|
243
|
+
}, O = class e extends j {
|
|
244
244
|
static {
|
|
245
245
|
i(this, "InjectionProviderModuleMissingIdentifierError");
|
|
246
246
|
}
|
|
@@ -248,7 +248,7 @@ var j = class e extends Error {
|
|
|
248
248
|
constructor(e) {
|
|
249
249
|
super(e, "An `identifier` must be supplied!");
|
|
250
250
|
}
|
|
251
|
-
}, N = class e extends
|
|
251
|
+
}, N = class e extends j {
|
|
252
252
|
static {
|
|
253
253
|
i(this, "InjectionProviderModuleGlobalMarkError");
|
|
254
254
|
}
|
|
@@ -275,7 +275,7 @@ var q = class {
|
|
|
275
275
|
}
|
|
276
276
|
module;
|
|
277
277
|
moduleNaked;
|
|
278
|
-
appModule=
|
|
278
|
+
appModule=L;
|
|
279
279
|
constructor(e, i) {
|
|
280
280
|
this.module = e, this.moduleNaked = e.toNaked(), this.appModule = i.appModule?.() ?? this.appModule,
|
|
281
281
|
this.checkIfShouldBeAddedToTheGlobalRegister();
|
|
@@ -384,6 +384,7 @@ var q = class {
|
|
|
384
384
|
let t = [ ...this.providers ];
|
|
385
385
|
return i?.providersMap && (t = t.map((e => i.providersMap(e, this)))), new e(r.buildInternalConstructorParams({
|
|
386
386
|
isAppModule: this.isAppModule,
|
|
387
|
+
markAsGlobal: this.isMarkedAsGlobal,
|
|
387
388
|
identifier: this.identifier,
|
|
388
389
|
defaultScope: this.defaultScope.native,
|
|
389
390
|
dynamicExports: this.dynamicExports,
|
|
@@ -411,7 +412,7 @@ var q = class {
|
|
|
411
412
|
}
|
|
412
413
|
injectImportedModules(t) {
|
|
413
414
|
t && 0 !== t.length && t.forEach((t => {
|
|
414
|
-
if ("GlobalAppModule" === t.toString()) throw new
|
|
415
|
+
if ("GlobalAppModule" === t.toString()) throw new j(this, "The 'GlobalAppModule' can't be imported!");
|
|
415
416
|
const n = t._getExportableModulesAndProviders(), r = t.dynamicExports?.(this, n);
|
|
416
417
|
void 0 !== r && this.shouldThrowWhenModuleDynamicExportsDontMatchTheStaticExports(t, n, r),
|
|
417
418
|
(r ?? n).forEach((n => {
|
|
@@ -544,11 +545,10 @@ var q = class {
|
|
|
544
545
|
async __unbindAll() {
|
|
545
546
|
this.shouldThrowIfDisposed(), await this.container.unbindAll(), this.removeRegisteredBindingSideEffects("all");
|
|
546
547
|
}
|
|
547
|
-
}, z = new Set,
|
|
548
|
+
}, z = new Set, H = class extends $ {
|
|
548
549
|
static {
|
|
549
550
|
i(this, "GlobalAppModule");
|
|
550
551
|
}
|
|
551
|
-
isMarkedAsGlobal=!0;
|
|
552
552
|
nakedModule=this;
|
|
553
553
|
isLoaded=!1;
|
|
554
554
|
constructor() {
|
|
@@ -558,9 +558,9 @@ var q = class {
|
|
|
558
558
|
}));
|
|
559
559
|
}
|
|
560
560
|
register(e) {
|
|
561
|
-
if (this.isLoaded) throw new
|
|
562
|
-
return this.nakedModule._lazyInit(e), this.
|
|
563
|
-
this;
|
|
561
|
+
if (this.isLoaded) throw new R(`The '${this.toString()}' has already been registered!`);
|
|
562
|
+
return this.nakedModule._lazyInit(e), this.checkIfRegisteredModulesHaveGlobalMark(this.toNaked(), this.imports),
|
|
563
|
+
this.isLoaded = !0, this;
|
|
564
564
|
}
|
|
565
565
|
toNaked() {
|
|
566
566
|
return super.toNaked();
|
|
@@ -568,14 +568,16 @@ var q = class {
|
|
|
568
568
|
async _dispose() {
|
|
569
569
|
this.isLoaded = !1, super._dispose();
|
|
570
570
|
}
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
if (
|
|
574
|
-
|
|
575
|
-
|
|
571
|
+
checkIfRegisteredModulesHaveGlobalMark(e, i, t = !1) {
|
|
572
|
+
i.forEach((i => {
|
|
573
|
+
if (i instanceof $) {
|
|
574
|
+
if (i.isMarkedAsGlobal) return z.delete(i), void (i.exports && this.checkIfRegisteredModulesHaveGlobalMark(i, i.exports, !0));
|
|
575
|
+
throw new N(i, t ? `Is not marked as \`global\` but has been imported into the \`AppModule\`via the \`${e.toString()}\` module!` : "Is not marked as `global` but has been imported into the `AppModule`!");
|
|
576
|
+
}
|
|
577
|
+
})), t || z.forEach((e => {
|
|
576
578
|
throw new N(e, "Is marked as 'global' and has not been imported into the 'AppModule'!");
|
|
577
579
|
}));
|
|
578
580
|
}
|
|
579
|
-
},
|
|
581
|
+
}, L = new H;
|
|
580
582
|
|
|
581
|
-
export {
|
|
583
|
+
export { L as AppModule, t as GLOBAL_APP_MODULE_ID, H as GlobalAppModule, V as GlobalContainer, g as Inject, I as InjectFromBase, v as Injectable, F as InjectionDynamicExportsOutOfRange, R as InjectionError, G as InjectionProviderModuleDisposedError, j as InjectionProviderModuleError, N as InjectionProviderModuleGlobalMarkError, O as InjectionProviderModuleMissingIdentifierError, s as InjectionScope, y as MultiInject, T as Named, k as Optional, _ as PostConstruct, D as PreDestroy, $ as ProviderModule, r as ProviderModuleHelpers, o as ProviderTokenHelpers, A as Tagged, x as Unmanaged, a as bindingScopeToInjectionScope, d as injectionScopeToBindingScope, u as isClass, h as isClassOrFunction, l as isFunction, f 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/errors/provider-module-global-mark.error.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/global-modules-register.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 { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an error with regards to the `markAsGlobal` option. */\nexport class InjectionProviderModuleGlobalMarkError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleGlobalMarkError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(module, message);\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 isMarkedAsGlobal: boolean = false;\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 markAsGlobal,\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 markAsGlobal,\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 markAsGlobal,\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.isMarkedAsGlobal = markAsGlobal ?? false;\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, _internalParams);\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 { AppModule, GlobalModuleRegister } from '../core';\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderModuleOptionsInternal,\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 private readonly appModule = AppModule;\n\n constructor(module: IProviderModule, internalOptions: ProviderModuleOptionsInternal) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n\n this.appModule = internalOptions.appModule?.() ?? this.appModule;\n\n this.checkIfShouldBeAddedToTheGlobalRegister();\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 checkIfShouldBeAddedToTheGlobalRegister(): void {\n if (this.moduleNaked.isAppModule || !this.module.isMarkedAsGlobal) return;\n\n GlobalModuleRegister.add(this.module);\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 type { IProviderModule } from '../types';\n\n/**\n * Each module which uses the `markAsGlobal` marker will\n * register itself into this register.\n *\n * Will then be used by the `AppModule` to make sure that the imported modules\n * are correctly using the global flag option.\n *\n * _Should be empty if all global modules are correctly registered._\n */\nexport const GlobalModuleRegister = new Set<IProviderModule>();\n","import { InjectionError, InjectionProviderModuleGlobalMarkError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { GlobalModuleRegister } from './global-modules-register';\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 override isMarkedAsGlobal = true;\n\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.checkIfImportsHaveGlobalMark();\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 private checkIfImportsHaveGlobalMark(): void {\n this.imports.forEach((imported) => {\n if (imported.isMarkedAsGlobal) {\n GlobalModuleRegister.delete(imported);\n\n return;\n }\n\n throw new InjectionProviderModuleGlobalMarkError(\n imported,\n 'Is not marked as `global` but has been imported into the `AppModule`!'\n );\n });\n\n GlobalModuleRegister.forEach((module) => {\n throw new InjectionProviderModuleGlobalMarkError(\n module,\n `Is marked as 'global' and has not been imported into the 'AppModule'!`\n );\n });\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","InjectionProviderModuleGlobalMarkError","InjectionProviderModuleError","name","constructor","module","message","Container","GlobalContainer","defaultScope","Container","ProviderModuleUtils","container","moduleNaked","module","appModule","AppModule","constructor","internalOptions","toNaked","checkIfShouldBeAddedToTheGlobalRegister","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","isAppModule","isMarkedAsGlobal","GlobalModuleRegister","add","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","isMarkedAsGlobal","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","markAsGlobal","_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","GlobalModuleRegister","Set","GlobalAppModule","ProviderModule","isMarkedAsGlobal","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","InjectionError","toString","_lazyInit","checkIfImportsHaveGlobalMark","toNaked","_dispose","imports","forEach","imported","GlobalModuleRegister","delete","InjectionProviderModuleGlobalMarkError","module","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/errors/provider-module-global-mark.error.ts","../src/core/global-container.ts","../src/core/provider-module.ts","../src/utils/provider-module.utils.ts","../src/core/global-modules-register.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 { IProviderModule } from '../types';\nimport { InjectionProviderModuleError } from './provider-module.error';\n\n/** Exception which indicates an error with regards to the `markAsGlobal` option. */\nexport class InjectionProviderModuleGlobalMarkError extends InjectionProviderModuleError {\n override name = InjectionProviderModuleGlobalMarkError.name;\n\n constructor(module: IProviderModule, message: string) {\n super(module, message);\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 isMarkedAsGlobal: boolean = false;\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 markAsGlobal,\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 markAsGlobal,\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 markAsGlobal: this.isMarkedAsGlobal,\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 markAsGlobal,\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.isMarkedAsGlobal = markAsGlobal ?? false;\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, _internalParams);\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 { AppModule, GlobalModuleRegister } from '../core';\nimport { InjectionScope } from '../enums';\nimport { ProviderTokenHelpers } from '../helpers';\nimport type {\n DependencyProvider,\n IProviderModule,\n IProviderModuleNaked,\n ProviderClassToken,\n ProviderFactoryToken,\n ProviderIdentifier,\n ProviderModuleOptionsInternal,\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 private readonly appModule = AppModule;\n\n constructor(module: IProviderModule, internalOptions: ProviderModuleOptionsInternal) {\n this.module = module;\n this.moduleNaked = module.toNaked();\n\n this.appModule = internalOptions.appModule?.() ?? this.appModule;\n\n this.checkIfShouldBeAddedToTheGlobalRegister();\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 checkIfShouldBeAddedToTheGlobalRegister(): void {\n if (this.moduleNaked.isAppModule || !this.module.isMarkedAsGlobal) return;\n\n GlobalModuleRegister.add(this.module);\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 type { IProviderModule } from '../types';\n\n/**\n * Each module which uses the `markAsGlobal` marker will\n * register itself into this register.\n *\n * Will then be used by the `AppModule` to make sure that the imported modules\n * are correctly using the global flag option.\n *\n * _Should be empty if all global modules are correctly registered._\n */\nexport const GlobalModuleRegister = new Set<IProviderModule>();\n","import { InjectionError, InjectionProviderModuleGlobalMarkError } from '../errors';\nimport { ProviderModuleHelpers } from '../helpers';\nimport type { AppModuleOptions, IAppModule, IProviderModuleNaked, StaticExports } from '../types';\nimport { GLOBAL_APP_MODULE_ID } from './constants';\nimport { GlobalModuleRegister } from './global-modules-register';\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.checkIfRegisteredModulesHaveGlobalMark(this.toNaked(), this.imports);\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 private checkIfRegisteredModulesHaveGlobalMark(\n parentModule: IProviderModuleNaked,\n list: StaticExports,\n isSecondaryImport = false\n ): void {\n (list as IProviderModuleNaked[]).forEach((module) => {\n if (!(module instanceof ProviderModule)) return;\n\n if (module.isMarkedAsGlobal) {\n GlobalModuleRegister.delete(module);\n\n // This module may also export other modules\n // which may have been marked as global\n // and not directly imported into the `AppModule`.\n if (module.exports) {\n this.checkIfRegisteredModulesHaveGlobalMark(module, module.exports, true);\n }\n\n return;\n }\n\n throw new InjectionProviderModuleGlobalMarkError(\n module,\n isSecondaryImport\n ? 'Is not marked as `global` but has been imported into the `AppModule`' +\n `via the \\`${parentModule.toString()}\\` module!`\n : 'Is not marked as `global` but has been imported into the `AppModule`!'\n );\n });\n\n if (isSecondaryImport) return;\n\n GlobalModuleRegister.forEach((module) => {\n throw new InjectionProviderModuleGlobalMarkError(\n module,\n `Is marked as 'global' and has not been imported into the 'AppModule'!`\n );\n });\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","InjectionProviderModuleGlobalMarkError","InjectionProviderModuleError","name","constructor","module","message","Container","GlobalContainer","defaultScope","Container","ProviderModuleUtils","container","moduleNaked","module","appModule","AppModule","constructor","internalOptions","toNaked","checkIfShouldBeAddedToTheGlobalRegister","bindToContainer","provider","defaultScope","ProviderTokenHelpers","isProviderIdentifier","bindSelfTokenToContainer","isClassToken","bindClassTokenToContainer","isValueToken","bindValueTokenToContainer","isFactoryToken","bindFactoryTokenToContainer","isAppModule","isMarkedAsGlobal","GlobalModuleRegister","add","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","isMarkedAsGlobal","isDisposed","isAppModule","container","defaultScope","dynamicExports","onReady","onDispose","importedProvidersMap","moduleUtils","imports","providers","importedProviders","exports","registeredBindingSideEffects","constructor","markAsGlobal","_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","GlobalModuleRegister","Set","GlobalAppModule","ProviderModule","nakedModule","isLoaded","constructor","ProviderModuleHelpers","buildInternalConstructorParams","identifier","Symbol","GLOBAL_APP_MODULE_ID","isAppModule","register","options","InjectionError","toString","_lazyInit","checkIfRegisteredModulesHaveGlobalMark","toNaked","imports","_dispose","parentModule","list","isSecondaryImport","forEach","module","isMarkedAsGlobal","GlobalModuleRegister","delete","exports","InjectionProviderModuleGlobalMarkError","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.6.
|
|
4
|
+
"version": "0.6.5",
|
|
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",
|