UNPKG

boostr

Version:
44 lines 2.41 kB
import { ApplicationService } from './application.js'; import { BackendService } from './backend.js'; import { DatabaseService } from './database.js'; import { WebFrontendService } from './web-frontend.js'; import { CustomService } from './custom.js'; import { loadApplicationConfig, loadServiceConfig } from '../config.js'; import { throwError } from '../utilities.js'; export async function createApplicationServiceFromDirectory(directory, { stage }) { let applicationConfig = await loadApplicationConfig(directory, { stage }); if (applicationConfig === undefined) { return undefined; } const applicationService = createApplicationService({ config: applicationConfig, stage }); for (const serviceName of Object.keys(applicationConfig.services)) { const serviceConfig = await loadServiceConfig(serviceName, { applicationConfig, stage }); const service = createSubservice({ config: serviceConfig, stage, name: serviceName }); applicationService.registerService(service); } for (const service of applicationService.getServices()) { const dependsOn = service.getConfig().dependsOn ?? []; const dependencyNames = Array.isArray(dependsOn) ? dependsOn : [dependsOn]; for (const dependencyName of dependencyNames) { if (!applicationService.hasService(dependencyName)) { throwError(`Unknown service '${dependencyName}' encountered in the 'dependsOn' property of a configuration (directory: '${service.getDirectory()}')`); } service.registerDependency(applicationService.getService(dependencyName)); } } return applicationService; } function createApplicationService({ config, stage }) { const { __directory: directory } = config; return new ApplicationService({ directory, config, stage }); } const subserviceClasses = [WebFrontendService, BackendService, DatabaseService, CustomService]; function createSubservice({ config, stage, name }) { const { type, __directory: directory } = config; let subserviceClass = subserviceClasses.find((subserviceClass) => subserviceClass.type === type); if (subserviceClass === undefined) { throwError(`Unknown service type '${type}' encountered in a configuration (directory: '${directory}')`); } return new subserviceClass({ directory, config, stage, name }); } //# sourceMappingURL=index.js.map