diff --git a/bin/commonPlugins.ts b/bin/commonPlugins.ts new file mode 100644 index 000000000..7fc5fc1ad --- /dev/null +++ b/bin/commonPlugins.ts @@ -0,0 +1,17 @@ +import {PackageData} from "ep_etherpad-lite/node/types/PackageInfo"; +import {writeFileSync} from "fs"; +import {installedPluginsPath} from "ep_etherpad-lite/static/js/pluginfw/installer"; +const pluginsModule = require('ep_etherpad-lite/static/js/pluginfw/plugins'); + +export const persistInstalledPlugins = async () => { + const plugins:PackageData[] = [] + const installedPlugins = {plugins: plugins}; + for (const pkg of Object.values(await pluginsModule.getPackages()) as PackageData[]) { + installedPlugins.plugins.push({ + name: pkg.name, + version: pkg.version, + }); + } + installedPlugins.plugins = [...new Set(installedPlugins.plugins)]; + writeFileSync(installedPluginsPath, JSON.stringify(installedPlugins)); +}; diff --git a/bin/installPlugins.ts b/bin/installPlugins.ts index 85ae0b6b4..feafee148 100644 --- a/bin/installPlugins.ts +++ b/bin/installPlugins.ts @@ -1,10 +1,8 @@ 'use strict'; -import {writeFileSync} from 'fs' import {linkInstaller, installedPluginsPath} from "ep_etherpad-lite/static/js/pluginfw/installer"; -import {PackageData} from "ep_etherpad-lite/node/types/PackageInfo"; +import {persistInstalledPlugins} from "./commonPlugins"; -const pluginsModule = require('ep_etherpad-lite/static/js/pluginfw/plugins'); if (process.argv.length === 2) { console.error('Expected at least one argument!'); process.exit(1); @@ -23,18 +21,7 @@ if (args.indexOf('--path') !== -1) { registryPlugins = args; } -const persistInstalledPlugins = async () => { - const plugins:PackageData[] = [] - const installedPlugins = {plugins: plugins}; - for (const pkg of Object.values(await pluginsModule.getPackages()) as PackageData[]) { - installedPlugins.plugins.push({ - name: pkg.name, - version: pkg.version, - }); - } - installedPlugins.plugins = [...new Set(installedPlugins.plugins)]; - writeFileSync(installedPluginsPath, JSON.stringify(installedPlugins)); -}; + async function run() { for (const plugin of registryPlugins) { diff --git a/bin/listPlugins.ts b/bin/listPlugins.ts new file mode 100644 index 000000000..3a56176c8 --- /dev/null +++ b/bin/listPlugins.ts @@ -0,0 +1,18 @@ +import {linkInstaller, pluginInstallPath} from "ep_etherpad-lite/static/js/pluginfw/installer"; +import {readdirSync} from "node:fs"; +import {availablePlugins} from 'ep_etherpad-lite/static/js/pluginfw/installer' +import {persistInstalledPlugins} from "./commonPlugins"; + + + +const walk = async () => { + const plugins = await linkInstaller.listPlugins() + + const pluginNames = plugins.join(" ") + + console.log("Installed plugins are:", pluginNames) +} + +(async () => { + await walk(); +})(); diff --git a/bin/package.json b/bin/package.json index 36ad07b47..7cbd74847 100644 --- a/bin/package.json +++ b/bin/package.json @@ -32,7 +32,9 @@ "rebuildPad": "node --import tsx rebuildPad.ts", "stalePlugins": "node --import tsx ./plugins/stalePlugins.ts", "checkPlugin": "node --import tsx ./plugins/checkPlugin.ts", - "install-plugins": "node --import tsx ./installPlugins.ts" + "install-plugins": "node --import tsx ./installPlugins.ts", + "remove-plugins": "node --import tsx ./removePlugins.ts", + "list-plugins": "node --import tsx ./listPlugins.ts" }, "author": "", "license": "ISC" diff --git a/bin/removePlugins.ts b/bin/removePlugins.ts new file mode 100644 index 000000000..b031ced7a --- /dev/null +++ b/bin/removePlugins.ts @@ -0,0 +1,21 @@ +import {linkInstaller} from "ep_etherpad-lite/static/js/pluginfw/installer"; +import {persistInstalledPlugins} from "./commonPlugins"; +if (process.argv.length === 2) { + console.error('Expected at least one argument!'); + process.exit(1); +} + +let pluginsToRemove = process.argv.slice(2); + +async function run() { + for (const plugin of pluginsToRemove) { + console.log(`Removing plugin from etherpad: ${plugin}`) + await linkInstaller.uninstallPlugin(plugin); + + } +} + +(async () => { + await run(); + await persistInstalledPlugins(); +})(); diff --git a/package.json b/package.json index 5c7354b2e..7588eed27 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,9 @@ "test-ui:ui": "pnpm --filter ep_etherpad-lite run test-ui:ui", "test-admin": "pnpm --filter ep_etherpad-lite run test-admin", "test-admin:ui": "pnpm --filter ep_etherpad-lite run test-admin:ui", - "install-plugins": "pnpm --filter bin run install-plugins" + "install-plugins": "pnpm --filter bin run install-plugins", + "remove-plugins": "pnpm --filter bin run remove-plugins", + "list-plugins": "pnpm --filter bin run list-plugins" }, "dependencies": { "ep_etherpad-lite": "workspace:./src"