boostr
Version:
Build and deploy your Layr apps
44 lines • 2.41 kB
JavaScript
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