UNPKG

opm-cli

Version:

Unofficial package manager for Sponge's Ore Plugin Repository.

107 lines (106 loc) 4.86 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 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;