@grouparoo/core
Version:
The Grouparoo Core
117 lines (116 loc) • 4.88 kB
JavaScript
;
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");
}