ovm
Version:
OVM is a CLI application for managing Obsidian vaults.
94 lines • 3.75 kB
JavaScript
;
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