@proto-kit/common • Docs
Documentation / @proto-kit/common / ModuleContainer
Class: ModuleContainer<Modules, ContainerConfig>
Reusable module container facilitating registration, resolution configuration, decoration and validation of modules
Extends
ConfigurableModule<CombinedModuleContainerConfig<Modules,ContainerConfig>>
Extended by
Type Parameters
• Modules extends ModulesRecord
The record of child module classes.
• ContainerConfig = NoConfig
Optional config type for keys that belong to the container itself (not forwarded to child modules). Defaults to NoConfig.
Implements
Constructors
new ModuleContainer()
new ModuleContainer<
Modules,ContainerConfig>(definition):ModuleContainer<Modules,ContainerConfig>
Parameters
• definition: Modules
Returns
ModuleContainer<Modules, ContainerConfig>
Overrides
ConfigurableModule.constructor
Defined in
packages/common/src/config/ModuleContainer.ts:172
Properties
currentConfig
protectedcurrentConfig:undefined|CombinedModuleContainerConfig<Modules,ContainerConfig>
Store the config separately, so that we can apply additional checks when retrieving it via the getter
Inherited from
ConfigurableModule.currentConfig
Defined in
packages/common/src/config/ConfigurableModule.ts:34
definition
definition:
Modules
Defined in
packages/common/src/config/ModuleContainer.ts:172
Accessors
config
Get Signature
get config():
CombinedModuleContainerConfig<Modules,ContainerConfig>
Returns
CombinedModuleContainerConfig<Modules, ContainerConfig>
Set Signature
set config(
config):void
Parameters
• config: CombinedModuleContainerConfig<Modules, ContainerConfig>
Returns
void
Overrides
Defined in
packages/common/src/config/ModuleContainer.ts:345
container
Get Signature
get
protectedcontainer():DependencyContainer
Returns
DependencyContainer
Defined in
packages/common/src/config/ModuleContainer.ts:220
containerConfig
Get Signature
get containerConfig():
ContainerConfig
Returns the container’s own configuration.
Returns
ContainerConfig
Defined in
packages/common/src/config/ModuleContainer.ts:179
dependencyContainer
Get Signature
get dependencyContainer():
DependencyContainer
Returns
DependencyContainer
Implementation of
ModuleContainerLike.dependencyContainer
Defined in
packages/common/src/config/ModuleContainer.ts:556
events
Get Signature
get events():
EventEmitterProxy<Modules>
Returns
EventEmitterProxy<Modules>
Defined in
packages/common/src/config/ModuleContainer.ts:301
moduleNames
Get Signature
get moduleNames():
string[]
Returns
string[]
list of module names
Defined in
packages/common/src/config/ModuleContainer.ts:187
Methods
assertContainerInitialized()
assertContainerInitialized(
container):asserts container is DependencyContainer
Parameters
• container: undefined | DependencyContainer
Returns
asserts container is DependencyContainer
Defined in
packages/common/src/config/ModuleContainer.ts:251
assertIsValidModuleName()
assertIsValidModuleName(
moduleName):asserts moduleName is StringKeyOf<Modules>
Assert that the iterated moduleName is of ModuleName type,
otherwise it may be just string e.g. when modules are iterated over
using e.g. a for loop.
Parameters
• moduleName: string
Returns
asserts moduleName is StringKeyOf<Modules>
Defined in
packages/common/src/config/ModuleContainer.ts:230
configure()
configure(
config):void
Provide additional configuration after the ModuleContainer was created.
Keep in mind that modules are only decorated once after they are resolved, therefore applying any configuration must happen before the first resolution.
Parameters
• config: CombinedModuleContainerConfig<Modules, ContainerConfig>
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:327
configurePartial()
configurePartial(
config):void
Parameters
• config: RecursivePartial<CombinedModuleContainerConfig<Modules, ContainerConfig>>
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:333
create()
create(
childContainerProvider):void
This is a placeholder for individual modules to override. This method will be called whenever the underlying container fully initialized
Parameters
• childContainerProvider: ChildContainerProvider
Returns
void
Overrides
Defined in
packages/common/src/config/ModuleContainer.ts:544
decorateModule()
protecteddecorateModule(moduleName,containedModule):void
Override this in the child class to provide custom features or module checks
Parameters
• moduleName: StringKeyOf<Modules>
• containedModule: InstanceType<Modules[StringKeyOf<Modules>]>
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:401
initializeDependencyFactories()
protectedinitializeDependencyFactories(factories):void
Inject a set of dependencies using the given list of DependencyFactories This method should be called during startup
Parameters
• factories: StringKeyOf<Modules>[]
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:428
isValidModuleName()
isValidModuleName(
modules,moduleName):moduleName is StringKeyOf<Modules>
Parameters
• modules: Modules
• moduleName: string | number | symbol
Returns
moduleName is StringKeyOf<Modules>
Defined in
packages/common/src/config/ModuleContainer.ts:238
onAfterModuleResolution()
protectedonAfterModuleResolution(moduleName):void
Handle module resolution, e.g. by decorating resolved modules
Parameters
• moduleName: StringKeyOf<Modules>
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:520
registerAliases()
protectedregisterAliases(originalToken,clas):void
Parameters
• originalToken: string
• clas: TypedClass<any>
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:259
registerModules()
protectedregisterModules(modules):void
Register modules into the current container, and registers a respective resolution hook in order to decorate the module upon/after resolution.
Parameters
• modules: Modules
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:276
registerValue()
registerValue<
Value>(modules):void
Register a non-module value into the current container
Type Parameters
• Value
Parameters
• modules: Record<string, Value>
Returns
void
Defined in
packages/common/src/config/ModuleContainer.ts:313
resolve()
resolve<
KeyType>(moduleName):InstanceType<ResolvableModules<Modules>[KeyType]>
Resolves a module from the current module container
We have to narrow down the ModuleName type here to
ResolvableModuleName, otherwise the resolved value might
be any module instance, not the one specifically requested as argument.
Type Parameters
• KeyType extends string
Parameters
• moduleName: KeyType
Returns
InstanceType<ResolvableModules<Modules>[KeyType]>
Defined in
packages/common/src/config/ModuleContainer.ts:368
resolveOrFail()
resolveOrFail<
ModuleType>(moduleName,moduleType?):ModuleType
Type Parameters
• ModuleType
Parameters
• moduleName: string
• moduleType?: TypedClass<ModuleType>
Returns
ModuleType
Implementation of
ModuleContainerLike.resolveOrFail
Defined in
packages/common/src/config/ModuleContainer.ts:376
validateModule()
protectedvalidateModule(moduleName,containedModule):void
Check if the provided module satisfies the container requirements, such as only injecting other known modules.
Parameters
• moduleName: StringKeyOf<Modules>
• containedModule: ConfigurableModule<unknown>
Returns
void