@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
34 lines • 1.57 kB
JavaScript
import path from 'path';
import { readJsonFile, writeJsonFile } from '../../utils/file.js';
import { SERVICE_WORKLOAD_CONFIG_FILE_NAME } from './config/serviceConfig.js';
import { findService, getService } from './serviceRegistry.js';
export const getCurrentServiceConfig = (serviceConfig, serviceName) => serviceConfig?.services?.[serviceName] ?? {};
export const resolveServiceSelection = async (serviceName, currentConfig, options = {}, dependencies = {}) => {
const service = getService(serviceName);
if (typeof service.resolveSelection === 'function') {
return service.resolveSelection(currentConfig, options, dependencies);
}
return {
...service.createDefaultConfigSection(),
...currentConfig
};
};
export const persistServiceConfig = (context, serviceName, serviceConfig, dependencies = {}) => {
const readJsonFileImpl = dependencies.readJsonFile ?? readJsonFile;
const writeJsonFileImpl = dependencies.writeJsonFile ?? writeJsonFile;
const currentRootConfig = readJsonFileImpl(context.configPath, {
allowMissing: true
}) ?? {
services: {}
};
const persistedConfigPath = findService(serviceName) ? path.join(path.dirname(context.configPath), serviceName, SERVICE_WORKLOAD_CONFIG_FILE_NAME) : context.configPath;
const nextRootConfig = {
...currentRootConfig,
services: {
...(currentRootConfig.services ?? {}),
[serviceName]: serviceConfig
}
};
writeJsonFileImpl(persistedConfigPath, persistedConfigPath === context.configPath ? nextRootConfig : serviceConfig);
return nextRootConfig;
};