UNPKG

ovm

Version:

OVM is a CLI application for managing Obsidian vaults.

94 lines 3.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deduplicatePlugins = exports.modifyCommunityPlugins = exports.pluginsSelector = exports.listInstalledPlugins = exports.removePluginDir = void 0; const prompts_1 = require("@inquirer/prompts"); const promises_1 = require("fs/promises"); const obsidian_utils_1 = require("obsidian-utils"); const logger_1 = require("../utils/logger"); const removePluginDir = async (pluginId, vaultPath) => { const pluginsPath = (0, obsidian_utils_1.vaultPathToPluginsPath)(vaultPath); const pluginDir = `${pluginsPath}/${pluginId}`; const childLogger = logger_1.logger.child({ pluginsPath, pluginId }); childLogger.debug(`Remove plugin`); await (0, promises_1.rm)(pluginDir, { recursive: true, force: true }); childLogger.debug(`Removed plugin`); }; exports.removePluginDir = removePluginDir; const listInstalledPlugins = async (vaultPath) => { const pluginsPath = (0, obsidian_utils_1.vaultPathToPluginsPath)(vaultPath); let installedPlugins = []; try { await (0, promises_1.access)(pluginsPath, promises_1.constants.R_OK); const entries = await (0, promises_1.readdir)(pluginsPath, { withFileTypes: true, }); installedPlugins = entries .filter((entry) => entry.isDirectory()) .map(({ name }) => ({ id: name, })); return installedPlugins; } catch (error) { const typedError = error; if (typedError.code === 'ENOENT') { return installedPlugins; } throw typedError; } }; exports.listInstalledPlugins = listInstalledPlugins; const pluginsSelector = async (plugins) => { const choices = plugins .map((plugin) => ({ name: plugin.id, value: plugin, })) .sort((a, b) => a.name.localeCompare(b.name)); const selectedPlugins = await (0, prompts_1.checkbox)({ choices, message: 'Select the plugins:', validate: (selected) => selected.length > 0 || 'At least one plugin must be selected', required: true, }); logger_1.logger.debug('selectedPlugins', { selectedPlugins }); return selectedPlugins; }; exports.pluginsSelector = pluginsSelector; const modifyCommunityPlugins = async (plugin, vaultPath, action = 'enable') => { const childLogger = logger_1.logger.child({ plugin, vaultPath, action }); childLogger.debug(`Modify community plugins json`); const communityPluginsDir = `${vaultPath}/.obsidian/community-plugins.json`; try { await (0, promises_1.access)(communityPluginsDir, promises_1.constants.W_OK); } catch (error) { const typedError = error; if (typedError.code === 'ENOENT') { const emptyPlugins = []; const content = JSON.stringify(emptyPlugins); await (0, promises_1.writeFile)(communityPluginsDir, content); return emptyPlugins; } else { throw typedError; } } const content = await (0, promises_1.readFile)(communityPluginsDir); let plugins = JSON.parse(content.toString()); if (action === 'disable') { plugins = plugins.filter((p) => p !== plugin.id); } else { plugins.push(plugin.id); } await (0, promises_1.writeFile)(communityPluginsDir, JSON.stringify(plugins, null, 2)); childLogger.debug(`Modify action performed`); return plugins; }; exports.modifyCommunityPlugins = modifyCommunityPlugins; const deduplicatePlugins = (plugins, stagePlugin) => { return plugins.filter((plugin) => plugin.id !== stagePlugin.id); }; exports.deduplicatePlugins = deduplicatePlugins; //# sourceMappingURL=plugins.js.map