UNPKG

opm-cli

Version:

Unofficial package manager for Sponge's Ore Plugin Repository.

104 lines (103 loc) 4.96 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const path = require("path"); const inquirer = require("inquirer"); const logger_1 = require("../../util/logger"); const ore_transport_1 = require("../../transports/ore-transport"); const config_1 = require("../../util/config"); function getConfirmation(pluginId, version = 'recommended') { const transport = new ore_transport_1.default(ore_transport_1.Endpoints.Confirm, pluginId, version); return transport.get(); } function downloadFile(url, output) { const transport = new ore_transport_1.default(ore_transport_1.Endpoints.Custom, url); return transport.save(output); } function installSingle(pluginPath, plugin, version, shouldSpin = true) { return __awaiter(this, void 0, void 0, function* () { if (shouldSpin) { logger_1.startSpinner(`Verifying ${plugin}...`); } const { post } = yield getConfirmation(plugin); if (shouldSpin) { logger_1.stopSpinner(); } if (shouldSpin) { const answer = yield inquirer.prompt({ type: 'confirm', name: 'Confirm download of unverified plugin', message: `${plugin} is not verified by sponge. Install at your own risk. Continue?`, default: true, }); if (!answer) { return logger_1.log('Disclaimer declined. Cancelling install.'); } } if (shouldSpin) { logger_1.startSpinner(`Installing ${plugin}...`); } yield downloadFile(post, pluginPath); if (shouldSpin) { logger_1.stopSpinner(); } if (shouldSpin) { logger_1.startSpinner('Updating config...'); yield config_1.addPlugin(plugin, version); } logger_1.log(`Successfully installed ${plugin}@${version}.`, shouldSpin); }); } function install(pluginId = '', cmd = {}) { return __awaiter(this, void 0, void 0, function* () { const modsPath = path.resolve(process.cwd(), './mods'); if (fs.existsSync(modsPath)) { try { if (pluginId !== '') { const [plugin = '', version = 'recommended'] = pluginId.split('@'); const pluginPath = path.join(modsPath, 'plugins', `${plugin}.jar`); yield installSingle(pluginPath, plugin, version); } else { logger_1.startSpinner('Reading config...'); const config = yield config_1.getConfig(); logger_1.stopSpinner(); if (config.plugins) { const answer = yield inquirer.prompt({ type: 'confirm', name: 'Confirm download of unverified plugin', message: `Some plugins may not be verified by sponge. Install at your own risk. Continue?`, default: true, }); if (!answer) { return logger_1.log('Disclaimer declined. Cancelling install.'); } logger_1.startSpinner('Installing plugins...'); const installs = Object.keys(config.plugins).map((plugin) => __awaiter(this, void 0, void 0, function* () { const version = config.plugins ? config.plugins[plugin] : 'recommended'; const pluginPath = path.join(modsPath, 'plugins', `${plugin}.jar`); yield installSingle(pluginPath, plugin, version, false); })); yield Promise.all(installs); logger_1.log(`Successfully installed ${Object.keys(config.plugins).length} plugins.`); } } } catch (error) { logger_1.log(`Unable to retreive plugin(s). ${error.message}`); } } else { logger_1.log('Must be in a valid sponge server directory.'); } }); } exports.default = install;