@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
42 lines • 2.09 kB
JavaScript
import { isPlainObject } from 'es-toolkit/predicate';
import { resolveRuntimeEnvironmentBinding } from './configShape.js';
import { clone, normalizeOptionalString } from '../../utils/value.js';
import { getAtlasGeneratedFeatureConfigPath } from '../../utils/atlas.js';
export const SERVICE_RUNTIME_CONFIG_VERSION = 1;
const createGeneratedServiceRuntime = (bindingRuntime, runtimeMetadata) => ({
serviceUrl: normalizeOptionalString(bindingRuntime?.serviceUrl) ?? normalizeOptionalString(runtimeMetadata?.serviceUrl) ?? null
});
const createGeneratedServiceEntry = (serviceName, serviceConfig, context, runtimeMetadataByService) => {
if (!isPlainObject(serviceConfig)) {
return null;
}
const environmentBinding = resolveRuntimeEnvironmentBinding(serviceConfig, context?.environment);
if (isPlainObject(environmentBinding)) {
const generatedConfig = clone(environmentBinding);
const bindingRuntime = isPlainObject(generatedConfig.runtime) ? generatedConfig.runtime : null;
delete generatedConfig.runtime;
return {
config: generatedConfig,
runtime: createGeneratedServiceRuntime(bindingRuntime, runtimeMetadataByService?.[serviceName]),
scope: 'project'
};
}
return {
config: clone(serviceConfig),
scope: 'global'
};
};
export const createGeneratedServiceConfig = (context, rootConfig, now = new Date(), options = {}) => ({
version: SERVICE_RUNTIME_CONFIG_VERSION,
environment: context.environment ?? null,
generatedAt: now.toISOString(),
projectId: context.projectId,
services: Object.fromEntries(Object.entries(rootConfig?.services ?? {}).map(([serviceName, serviceConfig]) => [serviceName, createGeneratedServiceEntry(serviceName, serviceConfig, context, options.runtimeMetadataByService)]).filter(([, serviceEntry]) => Boolean(serviceEntry)))
});
export const previewGeneratedServiceConfigArtifact = (context, cwd = process.cwd()) => ({
filePath: getAtlasGeneratedFeatureConfigPath('services', context.projectId, cwd)
});
export default {
createGeneratedServiceConfig,
previewGeneratedServiceConfigArtifact
};