UNPKG

flipper-plugin-lib

Version:

Library containing common Flipper plugin installation utilities

97 lines 4.04 kB
"use strict"; /** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUpdatablePlugins = void 0; const flipper_common_1 = require("flipper-common"); const pluginInstaller_1 = require("./pluginInstaller"); const semver_1 = __importDefault(require("semver")); const getNpmHostedPlugins_1 = require("./getNpmHostedPlugins"); const npm_api_1 = __importDefault(require("npm-api")); const getPluginDetails_1 = require("./getPluginDetails"); const pluginPaths_1 = require("./pluginPaths"); const p_map_1 = __importDefault(require("p-map")); const typeUtils_1 = require("./typeUtils"); const npmApi = new npm_api_1.default(); async function getUpdatablePlugins(query) { const installedPlugins = await (0, pluginInstaller_1.getInstalledPlugins)(); const npmHostedPlugins = new Map((await (0, getNpmHostedPlugins_1.getNpmHostedPlugins)({ query })).map((p) => [p.name, p])); const annotatedInstalledPlugins = await (0, p_map_1.default)(installedPlugins, async (installedPlugin) => { try { const npmPackageDescriptor = npmHostedPlugins.get(installedPlugin.name); if (npmPackageDescriptor) { npmHostedPlugins.delete(installedPlugin.name); if (semver_1.default.lt(installedPlugin.version, npmPackageDescriptor.version)) { const pkg = await npmApi.repo(npmPackageDescriptor.name).package(); const npmPluginDetails = await (0, getPluginDetails_1.getInstalledPluginDetails)((0, pluginPaths_1.getPluginVersionInstallationDir)(npmPackageDescriptor.name, npmPackageDescriptor.version), pkg); return { ...npmPluginDetails, updateStatus: { kind: 'update-available', version: npmPluginDetails.version, }, }; } } const updateStatus = { kind: 'up-to-date' }; return { ...installedPlugin, updateStatus, }; } catch (error) { return { ...installedPlugin, updateStatus: { kind: 'error', error, }, }; } }, { concurrency: 4, }); const annotatedNotInstalledPlugins = await (0, p_map_1.default)(npmHostedPlugins.values(), async (notInstalledPlugin) => { try { const pkg = await npmApi.repo(notInstalledPlugin.name).package(); const npmPluginDetails = (0, flipper_common_1.getPluginDetails)(pkg); if (npmPluginDetails.specVersion === 1) { return null; } return { ...npmPluginDetails, updateStatus: { kind: 'not-installed', version: npmPluginDetails.version, }, }; } catch (error) { console.log(`Failed to load details from npm for plugin ${notInstalledPlugin.name}`, error); return null; } }, { concurrency: 4, }); return [ ...annotatedInstalledPlugins.sort((p1, p2) => p1.name.localeCompare(p2.name)), ...annotatedNotInstalledPlugins .filter(typeUtils_1.notNull) .sort((p1, p2) => p1.name.localeCompare(p2.name)), ].filter((p) => !query || p.name.includes(query) || p.id.includes(query) || p.description?.includes(query) || p.title?.includes(query)); } exports.getUpdatablePlugins = getUpdatablePlugins; //# sourceMappingURL=getUpdatablePlugins.js.map