import { Container } from '@artus/injection'; import ConfigurationHandler from '../../configuration'; import { ArtusInjectEnum, ARTUS_DEFAULT_CONFIG_ENV } from '../../constraints'; import { DefineLoader } from '../decorator'; import { ManifestItem, Loader } from '../types'; import compatibleRequire from '../../utils/compatible-require'; import { PluginConfigItem } from '../../plugin/types'; @DefineLoader('plugin-config') class PluginConfigLoader implements Loader { private container: Container; constructor(container: Container) { this.container = container; } async load(item: ManifestItem) { const originConfigObj = await compatibleRequire(item.path); let [, env, extname] = item.filename.split('.'); if (!extname) { // No env flag, set to Default env = ARTUS_DEFAULT_CONFIG_ENV.DEFAULT; } let configObj = originConfigObj; if (typeof originConfigObj === 'function') { const app = this.container.get(ArtusInjectEnum.Application); configObj = originConfigObj(app); } for (const [, config] of Object.entries(configObj)) { (config as PluginConfigItem).configFilepath = `${item.path}${item.extname}`; } const config = { plugin: configObj } const configHandler = this.container.get(ConfigurationHandler); configHandler.setConfig(env, config); } } export default PluginConfigLoader;