UNPKG

@grouparoo/core

Version:
117 lines (116 loc) 4.88 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.uninstall = exports.install = exports.getAvailableGrouparooPlugins = exports.listPlugins = void 0; const actionhero_1 = require("actionhero"); const path_1 = __importDefault(require("path")); const pacote_1 = __importDefault(require("pacote")); const actionhero_2 = require("actionhero"); const semver_1 = __importDefault(require("semver")); const spawnPromise_1 = require("./spawnPromise"); const pluginDetails_1 = require("../modules/pluginDetails"); require("isomorphic-fetch"); async function listPlugins(includeInstalled = true, includeAvailable = true, includeVersions = true) { const plugins = []; const pluginManifest = (0, pluginDetails_1.getPluginManifest)(); const coreVersion = (0, pluginDetails_1.getCoreVersion)(); const installedPlugins = includeInstalled ? [ { name: "@grouparoo/core", version: coreVersion, license: "MPL-2.0", url: "https://github.com/grouparoo/grouparoo", }, ].concat(pluginManifest.plugins) : []; const availableGrouparooPlugins = includeAvailable ? await getAvailableGrouparooPlugins() : []; await Promise.all(installedPlugins.map(async (plugin) => { var _a, _b; const latestVersion = includeVersions ? await getLatestNPMVersion(plugin.name) : "unknown"; const loadedPlugin = actionhero_1.api.plugins.plugins.find((p) => p.name === plugin.name); plugins.push({ name: plugin.name, description: plugin.name, icon: loadedPlugin === null || loadedPlugin === void 0 ? void 0 : loadedPlugin.icon, currentVersion: plugin.version, latestVersion, upToDate: latestVersion === "unknown" ? true : semver_1.default.compare(plugin.version, latestVersion) >= 0, url: plugin.url, license: plugin.license, installed: true, source: ((_a = loadedPlugin === null || loadedPlugin === void 0 ? void 0 : loadedPlugin.connections) === null || _a === void 0 ? void 0 : _a.find((c) => c.direction === "import")) ? true : false, destination: ((_b = loadedPlugin === null || loadedPlugin === void 0 ? void 0 : loadedPlugin.connections) === null || _b === void 0 ? void 0 : _b.find((c) => c.direction === "export")) ? true : false, apps: loadedPlugin === null || loadedPlugin === void 0 ? void 0 : loadedPlugin.apps, }); })); await Promise.all(availableGrouparooPlugins.map(async (plugin) => { if (!plugins.find((p) => p.name === plugin.packageName)) { const latestVersion = includeVersions ? await getLatestNPMVersion(plugin.packageName) : "unknown"; plugins.push({ name: plugin.packageName, description: plugin.description, icon: plugin.imageUrl, currentVersion: undefined, latestVersion, upToDate: false, url: plugin.npmUrl, license: undefined, installed: false, source: plugin.source, destination: plugin.destination, apps: [], }); } })); return plugins; } exports.listPlugins = listPlugins; async function getAvailableGrouparooPlugins() { const pluginManifestUrl = actionhero_1.config.pluginManifest.url; try { const pluginManifest = await fetch(pluginManifestUrl).then((r) => r.json()); return pluginManifest; } catch (error) { (0, actionhero_2.log)(error.toString(), "info"); return []; } } exports.getAvailableGrouparooPlugins = getAvailableGrouparooPlugins; async function install(pluginName) { return (0, spawnPromise_1.spawnPromise)(getCli(), ["install", pluginName]); } exports.install = install; async function uninstall(pluginName) { return (0, spawnPromise_1.spawnPromise)(getCli(), ["uninstall", pluginName]); } exports.uninstall = uninstall; async function getLatestNPMVersion(pluginName, tag = "latest") { let latestVersion = "unknown"; try { const manifest = await pacote_1.default.manifest(`${pluginName}@${tag}`); latestVersion = manifest.version; } catch (error) { (0, actionhero_2.log)(error.toString(), "info"); } return latestVersion; } function getCli() { return path_1.default.join((0, pluginDetails_1.getParentPath)(), "node_modules", ".bin", "grouparoo"); }