@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
JavaScript
;
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