UNPKG

@ton-actions/tondev-contest

Version:

TON Dev Environment

77 lines 3.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.components = void 0; const os_1 = __importDefault(require("os")); const core_1 = require("../../core"); const utils_1 = require("../../core/utils"); const TS4_PKG = 'tonos-ts4'; const PYPI = `https://pypi.org/pypi/${TS4_PKG}/json`; const currentOS = os_1.default.type(); const [PYTHON, PIP] = ['Linux', 'Darwin'].includes(currentOS) ? ['python3', 'pip3'] : ['python', 'pip']; exports.components = { ts4: new class extends core_1.Component { async getCurrentVersion() { let version; try { const output = await utils_1.run(PIP, ['show', TS4_PKG], {}, utils_1.nullTerminal); version = output.split(os_1.default.EOL).find(line => (/^Version:/).exec(line)); } catch { // TODO handle the lack of 'pip' console.debug(`Package ${TS4_PKG} not found`); } return version ? version.split(/:\s*/)[1] : ''; } async ensureVersion(terminal, force, requiredVersion) { const current = await this.getCurrentVersion(); if (!force && current !== "" && !requiredVersion) { return false; } let version = (requiredVersion !== null && requiredVersion !== void 0 ? requiredVersion : "latest").toLowerCase(); if (!force && version === current) { return false; } const available = await this.loadAvailableVersions(); if (version === "latest") { version = available[0]; } else { if (!available.includes(version)) { throw new Error(`Invalid ${this.name} version ${version}`); } } if (!force && version === current) { return false; } const pkg = TS4_PKG + (version ? `==${version}` : ''); const output = await utils_1.run(PIP, ['install', '-U', pkg], {}, utils_1.nullTerminal); const successPattern = `Successfully installed ${TS4_PKG}-${version}`; const isOk = output.split(os_1.default.EOL).find(line => line === successPattern); if (!isOk) { terminal.writeError(output); return false; } else { terminal.log(successPattern); } return true; } async loadAvailableVersions() { const info = await utils_1.httpsGetJson(PYPI); const versions = Object.keys(info.releases) .filter(v => (/^(\d+\.){2}\d+$/).test(v)) .sort(utils_1.compareVersions) .reverse(); return versions.length < 10 ? versions : [...versions.slice(0, 10), "..."]; } }('', PYTHON, { executable: true, globally: true, }), }; //# sourceMappingURL=components.js.map