UNPKG

@devicecloud.dev/dcd

Version:

Better cloud maestro testing

83 lines (82 loc) 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VersionService = void 0; const node_child_process_1 = require("node:child_process"); /** * Service for handling version validation and checking */ class VersionService { /** * Check npm registry for the latest published version of the CLI * @returns Latest version string or null if check fails */ async checkLatestCliVersion() { try { const latestVersion = (0, node_child_process_1.execSync)('npm view @devicecloud.dev/dcd version', { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], }).trim(); return latestVersion; } catch { // Silently fail - version check is informational only return null; } } /** * Compare two semantic version strings * @param current - Current version * @param latest - Latest version * @returns true if current is older than latest */ isOutdated(current, latest) { const currentParts = current.split('.').map(Number); const latestParts = latest.split('.').map(Number); for (let i = 0; i < 3; i++) { if (currentParts[i] < latestParts[i]) return true; if (currentParts[i] > latestParts[i]) return false; } return false; } /** * Resolve and validate Maestro version against API compatibility data * @param requestedVersion - Version requested by user (or undefined for default) * @param compatibilityData - API compatibility data * @param options - Configuration options * @param options.debug - Enable debug logging * @param options.logger - Optional logger function * @returns Validated Maestro version string * @throws Error if version is not supported */ resolveMaestroVersion(requestedVersion, compatibilityData, options) { const { debug = false, logger } = options || {}; const log = logger || console.log; const { supportedVersions, defaultVersion, latestVersion } = compatibilityData.maestro; // Resolve "latest" to actual latest version from API let resolvedVersion = requestedVersion; if (requestedVersion === 'latest') { resolvedVersion = latestVersion; if (debug) { log(`[DEBUG] Resolved "latest" to ${latestVersion}`); } } else if (!requestedVersion) { resolvedVersion = defaultVersion; if (debug) { log(`[DEBUG] Using default Maestro version ${defaultVersion}`); } } // Validate Maestro version if (!supportedVersions.includes(resolvedVersion)) { throw new Error(`Maestro version ${resolvedVersion} is not supported. Supported versions: ${supportedVersions.join(', ')}`); } if (debug) { log(`[DEBUG] Maestro version validated: ${resolvedVersion}`); log(`[DEBUG] Supported Maestro versions: ${supportedVersions.join(', ')}`); } return resolvedVersion; } } exports.VersionService = VersionService;