UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

66 lines 2.35 kB
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 }; };