UNPKG

@milkmaccya2/hostswitch

Version:

A simple CLI tool to manage and switch between multiple hosts file profiles for different development environments

223 lines 7.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HostSwitchFacade = void 0; class HostSwitchFacade { hostSwitchService; processManager; permissionChecker; constructor(hostSwitchService, processManager, permissionChecker) { this.hostSwitchService = hostSwitchService; this.processManager = processManager; this.permissionChecker = permissionChecker; } async listProfiles() { try { const profiles = this.hostSwitchService.getProfiles(); return { success: true, data: { profiles }, }; } catch (error) { return { success: false, message: `Failed to list profiles: ${error instanceof Error ? error.message : String(error)}`, }; } } async createProfile(name, fromCurrent) { const validation = this.validateProfileName(name); if (!validation.success) { return validation; } try { const result = this.hostSwitchService.createProfile(name, fromCurrent); if (result.success) { return { success: true, message: `Profile "${name}" created successfully`, }; } else { return { success: false, message: result.message || 'Failed to create profile', }; } } catch (error) { return { success: false, message: `Failed to create profile: ${error instanceof Error ? error.message : String(error)}`, }; } } async switchProfile(name) { try { if (!this.hostSwitchService.profileExists(name)) { return { success: false, message: `Profile "${name}" does not exist`, }; } if (this.permissionChecker.requiresSudo()) { return { success: false, requiresSudo: true, sudoCommand: `sudo hostswitch switch ${name}`, message: 'This operation requires sudo privileges', }; } const result = await this.hostSwitchService.switchProfile(name); if (result.success) { let message = `Switched to profile "${name}"`; if (result.backupPath) { message += ' (backup created)'; } return { success: true, message, data: { switchResult: result }, }; } else { return { success: false, message: result.message || 'Failed to switch profile', }; } } catch (error) { return { success: false, message: `Failed to switch profile: ${error instanceof Error ? error.message : String(error)}`, }; } } async switchProfileWithSudo(name) { try { const result = await this.permissionChecker.rerunWithSudo(['switch', name]); if (result.success) { return { success: true, message: result.message || 'Switched successfully', }; } else { return { success: false, message: `Failed to switch profile: ${result.message || 'Unknown error'}`, }; } } catch (error) { return { success: false, message: `Failed to switch profile: ${error instanceof Error ? error.message : String(error)}`, }; } } async deleteProfile(name, force = false) { const validation = this.validateProfileName(name); if (!validation.success) { return validation; } if (!force) { return { success: false, message: 'This operation requires confirmation. Add --force flag to proceed without confirmation.', requiresConfirmation: true, }; } try { const result = this.hostSwitchService.deleteProfile(name); if (result.success) { return { success: true, message: `Profile "${name}" deleted successfully`, }; } else { return { success: false, message: result.message || 'Failed to delete profile', }; } } catch (error) { return { success: false, message: `Failed to delete profile: ${error instanceof Error ? error.message : String(error)}`, }; } } async showProfile(name) { try { const result = this.hostSwitchService.getProfileContent(name); if (result.success) { return { success: true, data: { content: result.content }, }; } else { return { success: false, message: result.message || 'Failed to get profile content', }; } } catch (error) { return { success: false, message: `Failed to show profile: ${error instanceof Error ? error.message : String(error)}`, }; } } async editProfile(name) { try { if (!this.hostSwitchService.profileExists(name)) { return { success: false, message: `Profile "${name}" does not exist`, }; } const profilePath = this.hostSwitchService.getProfilePath(name); await this.processManager.openEditor('vi', profilePath); return { success: true, message: `Profile "${name}" edited successfully`, }; } catch (error) { return { success: false, message: `Failed to edit profile: ${error instanceof Error ? error.message : String(error)}`, }; } } getCurrentProfile() { return this.hostSwitchService.getCurrentProfile(); } getDeletableProfiles() { const profiles = this.hostSwitchService.getProfiles(); return profiles.filter((p) => !p.isCurrent); } validateProfileName(name) { if (!name || name.trim() === '') { return { success: false, message: 'Profile name cannot be empty', }; } if (!/^[a-zA-Z0-9_-]+$/.test(name)) { return { success: false, message: 'Invalid profile name. Use only letters, numbers, hyphens, and underscores', }; } return { success: true }; } } exports.HostSwitchFacade = HostSwitchFacade; //# sourceMappingURL=HostSwitchFacade.js.map