UNPKG

@interopio/desktop-cli

Version:

CLI tool for setting up, building and packaging io.Connect Desktop projects

115 lines 5.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ComponentsService = void 0; const config_service_1 = require("../config/config.service"); const logger_1 = require("../../utils/logger"); const file_helper_1 = require("./file.helper"); const github_store_1 = require("./stores/github.store"); const local_store_1 = require("./stores/local.store"); const s3_store_1 = require("./stores/s3.store"); /** * Service for managing components */ class ComponentsService { logger = logger_1.Logger.getInstance(); componentsStore; constructor() { if (config_service_1.ConfigManager.config.components.store === "github") { this.componentsStore = new github_store_1.GitHubComponentsStore(config_service_1.ConfigManager.config.components.storeGithubRepo); } else if (config_service_1.ConfigManager.config.components.store === "local") { this.componentsStore = new local_store_1.LocalComponentsStore(config_service_1.ConfigManager.config.components.storeLocalPath); } else if (config_service_1.ConfigManager.config.components.store === "s3") { this.componentsStore = new s3_store_1.S3ComponentsStore(config_service_1.ConfigManager.config.components.storeS3Config); } else { throw new Error(`Unknown components store: ${config_service_1.ConfigManager.config.components.store}`); } this.logger.info(`Using components store: ${this.componentsStore.getInfo()}`); } async listComponentsInThisProject() { // Logic to extract components from the definition const componentsList = config_service_1.ConfigManager.config.components.list; return Object.keys(componentsList).map(key => ({ name: key, version: componentsList[key] })); } async browseComponentsFromStore() { this.logger.info(`Listing available components from store ${this.componentsStore.getInfo()}...`); const all = await this.componentsStore.getAll(); const byComponent = all.reduce((acc, component) => { let current = acc[component.name]; if (!current) { current = { versions: new Set() }; acc[component.name] = current; } current.versions.add(component.version); return acc; }, {}); this.logger.debug(`Found ${Object.keys(byComponent).length} components:`); for (const [name, { versions }] of Object.entries(byComponent)) { this.logger.debug(`Component: ${name}, Versions: ${Array.from(versions).join(", ")}`); } return Object.entries(byComponent).map(([name, { versions }]) => ({ name, versions: Array.from(versions) })); } async installComponent(name, version) { version = version ?? "latest"; if (name.indexOf('@') >= 0) { const parts = name.split('@'); name = parts[0]; version = parts[1] || version; } this.logger.info(`Installing component ${name}@${version}...`); // install the component await this.installComponentCore(name, version); this.logger.debug(`Updating iocd.cli.config.json to include ${name}@${version}...`); // Save back to config const componentsList = config_service_1.ConfigManager.config.components.list; componentsList[name] = version; await config_service_1.ConfigManager.saveComponents(componentsList); this.logger.debug(`Updated iocd.cli.config.json to include ${name}@${version}`); this.logger.info(`Component ${name}@${version} installed successfully.`); } async uninstallComponent(name) { this.logger.info(`Uninstalling component ${name}...`); // Remove from config first const componentsList = config_service_1.ConfigManager.config.components.list; if (componentsList[name]) { delete componentsList[name]; await config_service_1.ConfigManager.saveComponents(componentsList); this.logger.debug(`Updated iocd.cli.config.json to remove ${name}`); } else { this.logger.warn(`Component ${name} not found in iocd.cli.config.json`); } // Now remove the files const fileService = new file_helper_1.FileHelper(); await fileService.removeComponent(name); this.logger.info(`Component ${name} uninstalled successfully.`); } async installComponents() { this.logger.info('Installing all components described in iocd.cli.config.json...'); // Use the ComponentsStore to download all components described in package.json under ioCDComponents const components = await this.listComponentsInThisProject(); for (const component of components) { await this.installComponentCore(component.name, component.version); } this.logger.info('All components installed successfully!'); } async installComponentCore(name, version) { this.logger.debug(`Installing component ${name}@${version}...`); const componentData = await this.componentsStore.download(name, version); const fileService = new file_helper_1.FileHelper(); await fileService.storeComponent(componentData); this.logger.debug(`Component ${name}@${version} installed successfully.`); } } exports.ComponentsService = ComponentsService; //# sourceMappingURL=components.service.js.map