opm-cli
Version:
Unofficial package manager for Sponge's Ore Plugin Repository.
107 lines (106 loc) • 4.86 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 inquirer = require("inquirer");
const path = require("path");
const sponge_transport_1 = require("../../transports/sponge-transport");
const logger_1 = require("../../util/logger");
const get_server_1 = require("../../util/get-server");
const config_1 = require("../../util/config");
function promptType() {
return inquirer.prompt({
type: 'list',
name: 'type',
message: 'Type',
choices: ['Vanilla', 'Forge', new inquirer.Separator(), 'Vanilla-Stable', 'Forge-Stable']
});
}
function getServerName(serverType) {
return serverType.includes('Vanilla') ? 'spongevanilla' : 'spongeforge';
}
function shouldAskVersion(serverType) {
return serverType === 'Vanilla' || serverType === 'Forge';
}
function getServerInfo(serverType) {
const serverName = getServerName(serverType);
const transport = new sponge_transport_1.default(`https://dl-api.spongepowered.org/v1/org.spongepowered/${serverName}`);
return transport.get();
}
function promptMinecraftVersion(spongeInfo) {
return inquirer.prompt({
type: 'list',
name: 'mcVersion',
message: 'Minecraft Version',
choices: spongeInfo.dependencies.minecraft
});
}
function getDownloads(serverType, mcVersion) {
const serverName = getServerName(serverType);
const transport = new sponge_transport_1.default(`https://dl-api.spongepowered.org/v1/org.spongepowered/${serverName}/downloads`);
return transport.get({
type: 'stable',
minecraft: mcVersion,
changelog: false,
});
}
function promptSpongeVersion(downloads) {
return inquirer.prompt({
type: 'list',
name: 'serverVersion',
message: 'Server Version',
choices: downloads.map(download => download.version)
});
}
function downloadArtifact(serverType, mcVersion, spongeVersion) {
const serverName = getServerName(serverType);
const fileName = `${serverName}-${spongeVersion}.jar`;
const artifact = `https://repo.spongepowered.org/maven/org/spongepowered/${serverName}/${spongeVersion}/${fileName}`;
const transport = new sponge_transport_1.default(artifact);
return transport.save(path.resolve(process.cwd(), `./${fileName}`));
}
function init(arg = '', cmd) {
return __awaiter(this, void 0, void 0, function* () {
if ((yield get_server_1.default()) != null) {
if (config_1.hasConfig()) {
return console.log('Already contains a server. Run \'opm start\' to run server.');
}
yield config_1.getConfig();
return console.log('Server artifact already exists but no config exists. Config was created.');
}
try {
console.log('Create a sponge server...');
const { type: serverType } = yield promptType();
let mcVersion = '';
let spongeVersion = '';
logger_1.startSpinner('Resolving server info...');
const spongeInfo = yield getServerInfo(serverType);
logger_1.stopSpinner();
if (shouldAskVersion(serverType)) {
mcVersion = (yield promptMinecraftVersion(spongeInfo)).mcVersion;
const downloads = yield getDownloads(serverType, mcVersion);
spongeVersion = (yield promptSpongeVersion(downloads)).serverVersion;
}
else {
mcVersion = spongeInfo.buildTypes.stable.recommended.dependencies.minecraft;
spongeVersion = spongeInfo.buildTypes.stable.recommended.version;
}
logger_1.startSpinner('Downloading artifact...');
yield downloadArtifact(serverType, mcVersion, spongeVersion);
logger_1.stopSpinner();
logger_1.startSpinner('Creating config...');
yield config_1.getConfig();
logger_1.log('Successfully downloaded artifact. Run \'opm start\' to start the server.');
}
catch (error) {
logger_1.log(`Unable to download sponge. ${error.message}`);
}
});
}
exports.default = init;