@proto-kit/commonDocs


Documentation / @proto-kit/common / ModuleContainer

Class: ModuleContainer<Modules, ContainerConfig>

Reusable module container facilitating registration, resolution configuration, decoration and validation of modules

Extends

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

protected currentConfig: 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

ConfigurableModule.config

Defined in

packages/common/src/config/ModuleContainer.ts:345


container

Get Signature

get protected container(): 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

ConfigurableModule.create

Defined in

packages/common/src/config/ModuleContainer.ts:544


decorateModule()

protected decorateModule(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()

protected initializeDependencyFactories(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()

protected onAfterModuleResolution(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()

protected registerAliases(originalToken, clas): void

Parameters

originalToken: string

clas: TypedClass<any>

Returns

void

Defined in

packages/common/src/config/ModuleContainer.ts:259


registerModules()

protected registerModules(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()

protected validateModule(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

Defined in

packages/common/src/config/ModuleContainer.ts:198