UNPKG

@ordojs/cli

Version:

Command-line interface for OrdoJS framework

177 lines 6.31 kB
/** * @fileoverview OrdoJS CLI - Deployment adapter manager * Manages deployment adapters and provides a plugin architecture */ import path from 'path'; import { readFile, writeFile } from '../fs.js'; import { logger } from '../logger.js'; import { DeploymentAdapter, DeploymentConfig, DeploymentResult } from './adapter-interface.js'; /** * Default adapter manager configuration */ const DEFAULT_CONFIG = { configDir: '.ordojs/deployment', defaultAdapter: 'vercel' }; /** * Deployment adapter manager * Manages deployment adapters and provides a plugin architecture */ export class DeploymentAdapterManager { /** * Registered adapters */ adapters = new Map(); /** * Adapter manager configuration */ config; /** * Create a new deployment adapter manager * @param config Adapter manager configuration */ constructor(config = {}) { this.config = { ...DEFAULT_CONFIG, ...config }; } /** * Register a deployment adapter * @param adapter Deployment adapter */ registerAdapter(adapter) { if (this.adapters.has(adapter.name)) { logger.warn(`Adapter '${adapter.name}' is already registered. Overwriting...`); } this.adapters.set(adapter.name, adapter); logger.debug(`Registered deployment adapter: ${adapter.name}`); } /** * Get a deployment adapter by name * @param name Adapter name * @returns Deployment adapter */ getAdapter(name) { return this.adapters.get(name); } /** * Get all registered adapters * @returns Array of deployment adapters */ getAllAdapters() { return Array.from(this.adapters.values()); } /** * Get the default adapter * @returns Default deployment adapter */ getDefaultAdapter() { return this.adapters.get(this.config.defaultAdapter || 'vercel'); } /** * Set the default adapter * @param name Adapter name */ setDefaultAdapter(name) { if (!this.adapters.has(name)) { throw new Error(`Adapter '${name}' is not registered`); } this.config.defaultAdapter = name; logger.debug(`Set default deployment adapter to: ${name}`); } /** * Load deployment configuration from file * @param target Deployment target name * @returns Deployment configuration */ async loadDeploymentConfig(target) { try { const configPath = path.join(this.config.configDir || '.ordojs/deployment', `${target}.json`); const configContent = await readFile(configPath); return JSON.parse(configContent); } catch (error) { logger.warn(`Failed to load deployment configuration for target '${target}': ${error instanceof Error ? error.message : String(error)}`); return { outputDir: 'dist' }; } } /** * Save deployment configuration to file * @param target Deployment target name * @param config Deployment configuration */ async saveDeploymentConfig(target, config) { try { const configDir = this.config.configDir || '.ordojs/deployment'; const configPath = path.join(configDir, `${target}.json`); await writeFile(configPath, JSON.stringify(config, null, 2)); logger.debug(`Saved deployment configuration for target '${target}'`); } catch (error) { logger.error(`Failed to save deployment configuration for target '${target}': ${error instanceof Error ? error.message : String(error)}`); throw error; } } /** * Prepare deployment using the specified adapter * @param adapterName Adapter name * @param config Deployment configuration * @returns Deployment result */ async prepareDeployment(adapterName, config) { const adapter = this.getAdapter(adapterName); if (!adapter) { return { success: false, error: `Adapter '${adapterName}' not found`, generatedFiles: [], instructions: `Adapter '${adapterName}' not found. Available adapters: ${Array.from(this.adapters.keys()).join(', ')}` }; } // Validate configuration const validation = adapter.validateConfig(config); if (!validation.valid) { return { success: false, error: `Invalid deployment configuration: ${validation.errors?.join(', ')}`, generatedFiles: [], instructions: `Please fix the configuration errors and try again: ${validation.errors?.join(', ')}` }; } // Prepare deployment try { const result = await adapter.prepareDeployment(config); // Log success or failure if (result.success) { logger.success(`Deployment preparation for '${adapterName}' successful`); } else { logger.error(`Deployment preparation for '${adapterName}' failed: ${result.error}`); } return result; } catch (error) { logger.error(`Deployment preparation for '${adapterName}' failed with an exception: ${error instanceof Error ? error.message : String(error)}`); return { success: false, error: `Deployment preparation failed: ${error instanceof Error ? error.message : String(error)}`, generatedFiles: [], instructions: 'An error occurred during deployment preparation. Please check the logs for details.' }; } } /** * Optimize for deployment using the specified adapter * @param adapterName Adapter name * @param config Deployment configuration * @returns Optimization results */ async optimizeForDeployment(adapterName, config) { const adapter = this.getAdapter(adapterName); if (!adapter) { throw new Error(`Adapter '${adapterName}' not found`); } return adapter.optimizeForDeployment(config, config.outputDir); } } //# sourceMappingURL=adapter-manager.js.map