@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
56 lines • 2.2 kB
JavaScript
import { isBoolean, isEmpty, isPlainObject, isString } from 'es-toolkit/compat';
const normalizeCapabilityFlags = capabilities => {
if (capabilities === undefined) {
return {};
}
if (!isPlainObject(capabilities)) {
throw new Error('Atlas service descriptor capabilities must be an object.');
}
for (const [capabilityName, capabilityValue] of Object.entries(capabilities)) {
if (!isBoolean(capabilityValue)) {
throw new Error(`Atlas service capability "${capabilityName}" must be a boolean.`);
}
}
return {
...capabilities
};
};
const assertNonEmptyString = (value, propertyPath) => {
if (!isString(value) || isEmpty(value.trim())) {
throw new Error(`Atlas service descriptor ${propertyPath} must be a non-empty string.`);
}
return value.trim();
};
const normalizeTemplateRootDirectories = templateRootDirectories => {
if (templateRootDirectories === undefined) {
return [];
}
if (!Array.isArray(templateRootDirectories)) {
throw new Error('Atlas service descriptor templateRootDirectories must be an array.');
}
return templateRootDirectories.map((entry, index) => assertNonEmptyString(entry, `templateRootDirectories[${index}]`));
};
export class ServiceDescriptor {
constructor({
capabilities,
configSectionKey,
defaultModuleSource,
defaultRootDir,
description,
displayName,
id,
moduleRelativePath,
templateRootDirectories
}) {
this.id = assertNonEmptyString(id, 'id');
this.displayName = assertNonEmptyString(displayName, 'displayName');
this.configSectionKey = assertNonEmptyString(configSectionKey ?? id, 'configSectionKey');
this.description = assertNonEmptyString(description, 'description');
this.defaultModuleSource = assertNonEmptyString(defaultModuleSource, 'defaultModuleSource');
this.defaultRootDir = assertNonEmptyString(defaultRootDir, 'defaultRootDir');
this.moduleRelativePath = assertNonEmptyString(moduleRelativePath, 'moduleRelativePath');
this.templateRootDirectories = normalizeTemplateRootDirectories(templateRootDirectories);
this.capabilities = normalizeCapabilityFlags(capabilities);
}
}
export default ServiceDescriptor;