Changelog - 2026-09-10
@configuration class artifact and type-safe component options
FeatureTwo related capabilities for application startup:
@configurationclass artifact: Runs before datasources and components, can use@provideto supply configuration values for other artifacts, and orders deterministically via topological sorting of declared dependencies (after: [ConfigA]).- Type-safe component options:
application.component(ComponentClass, { options })accepts typed options validated against the component's generic options parameter and passes them directly toinstance.configure(options)during initialization.
1. @configuration with topological ordering
ts
import { BaseConfiguration, configuration, provide } from '@venizia/ignis-kernel';
@configuration()
export class DatabaseConfiguration extends BaseConfiguration {
@provide({ key: 'configurations.dbUrl' })
dbUrl(): string {
return process.env.DATABASE_URL!;
}
}
@configuration({ after: [DatabaseConfiguration] })
export class CacheConfiguration extends BaseConfiguration {
override setup(): void {
// Guaranteed to execute after DatabaseConfiguration
}
}- Topological sort: Sibling configurations without explicit dependencies run deterministically sorted by class name (
localeCompare). - Cycle detection: Circular dependencies (
A -> B -> A) throw immediately at boot with[sortConfigurationsTopologically] Dependency cycle detected in configurations: .... - Boot order: Configurations run at
REGISTER_CONFIGURATIONS, beforeREGISTER_DATA_SOURCESandREGISTER_COMPONENTS, so provided configuration values are available when datasources and components boot.
2. Options passed at registration
ts
application.component(MailComponent, {
options: {
provider: 'amazon-ses',
config: { region: 'ap-southeast-1' },
},
});TMixinOptsgainsoptions?: Options.application.component<Base, Options>()andapplication.dataSource<Base, Options>()type-checkoptionsagainst the class'sConfigurableOptionsgeneric.registerDynamicBindingspasses the options map entry toinstance.configure(options).