@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
66 lines • 2.35 kB
JavaScript
import { normalizeOptionalString } from '../../utils/value.js';
export const normalizeSearchReleaseConfig = releaseConfig => ({
active: normalizeOptionalString(releaseConfig?.active),
candidate: normalizeOptionalString(releaseConfig?.candidate),
strategy: releaseConfig?.strategy === 'managed' ? 'managed' : 'direct'
});
export const resolveSearchReleaseTarget = releaseConfig => {
const normalizedConfig = normalizeSearchReleaseConfig(releaseConfig);
if (normalizedConfig.strategy !== 'managed') {
return {
...normalizedConfig,
releaseId: null,
target: 'direct'
};
}
if (normalizedConfig.candidate) {
return {
...normalizedConfig,
releaseId: normalizedConfig.candidate,
target: 'candidate'
};
}
if (normalizedConfig.active) {
return {
...normalizedConfig,
releaseId: normalizedConfig.active,
target: 'active'
};
}
return {
...normalizedConfig,
releaseId: null,
target: 'unassigned'
};
};
export const scopeSearchManifestUriToRelease = (manifestUri, releaseConfig) => {
const normalizedManifestUri = normalizeOptionalString(manifestUri);
if (!normalizedManifestUri) {
return null;
}
const releaseTarget = resolveSearchReleaseTarget(releaseConfig);
if (!releaseTarget.releaseId) {
return normalizedManifestUri;
}
const lastSlashIndex = normalizedManifestUri.lastIndexOf('/');
if (lastSlashIndex < 0 || lastSlashIndex === normalizedManifestUri.length - 1) {
return normalizedManifestUri;
}
const manifestDirectory = normalizedManifestUri.slice(0, lastSlashIndex);
const manifestFileName = normalizedManifestUri.slice(lastSlashIndex + 1);
return `${manifestDirectory}/releases/${encodeURIComponent(releaseTarget.releaseId)}/${manifestFileName}`;
};
export const promoteSearchReleaseConfig = releaseConfig => {
const normalizedConfig = normalizeSearchReleaseConfig(releaseConfig);
if (normalizedConfig.strategy !== 'managed') {
throw new Error('Atlas search release promotion requires search.release.strategy to be "managed".');
}
if (!normalizedConfig.candidate) {
throw new Error('Atlas search release promotion requires search.release.candidate to be set.');
}
return {
active: normalizedConfig.candidate,
candidate: null,
strategy: normalizedConfig.strategy
};
};