@interopio/desktop-cli
Version:
CLI tool for setting up, building and packaging io.Connect Desktop projects
115 lines • 5.58 kB
JavaScript
;
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