opm-cli
Version:
Unofficial package manager for Sponge's Ore Plugin Repository.
104 lines (103 loc) • 4.96 kB
JavaScript
;
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;