From 0e9020ee1f5133be803c7a5aa1eacb51a280ebdf Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:56:30 +0200 Subject: [PATCH] Added alternative to loading plugins. --- src/bin/release.js | 2 +- src/bun.lockb | Bin 354430 -> 354792 bytes src/package.json | 1 + src/static/js/pluginfw/installer.js | 28 ++++++++++---------- src/static/js/pluginfw/plugins.js | 38 ++++++++++++++++++++-------- 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/bin/release.js b/src/bin/release.js index 55df435b6..03dcfc203 100644 --- a/src/bin/release.js +++ b/src/bin/release.js @@ -137,7 +137,7 @@ try { writeJson('./src/package.json', pkg); // run npm version `release` where release is patch, minor or major - run('npm install --package-lock-only', {cwd: 'src/'}); + run('bun install --package-lock-only', {cwd: 'src/'}); // run npm install --package-lock-only <-- required??? // Many users will be using the latest LTS version of npm, and the latest LTS version of npm uses diff --git a/src/bun.lockb b/src/bun.lockb index 18e0fe611bcc3eb6359f16de09f69634690b5f30..76fca1e2334723edc46c5a0dc24592f20d4e4853 100755 GIT binary patch delta 56488 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 delta 70015 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 b%($J9sU4y?YBC!PRl-hX?r&k!qV4|yFaGKe diff --git a/src/package.json b/src/package.json index 2062cb7b8..f08acd8b3 100644 --- a/src/package.json +++ b/src/package.json @@ -33,6 +33,7 @@ "async": "^3.2.4", "axios": "^1.5.1", "clean-css": "^5.3.2", + "command-exists": "^1.2.9", "cookie-parser": "^1.4.6", "cross-spawn": "^7.0.3", "ejs": "^3.1.9", diff --git a/src/static/js/pluginfw/installer.js b/src/static/js/pluginfw/installer.js index 6c5784b00..d2f935e86 100644 --- a/src/static/js/pluginfw/installer.js +++ b/src/static/js/pluginfw/installer.js @@ -34,7 +34,7 @@ exports.uninstall = async (pluginName, cb = null) => { // The --no-save flag prevents npm from creating package.json or package-lock.json. // The --legacy-peer-deps flag is required to work around a bug in npm v7: // https://github.com/npm/cli/issues/2199 - await runCmd(['npm', 'uninstall', '--no-save', '--legacy-peer-deps', pluginName]); + await runCmd(['bun', 'uninstall', '--no-save', '--legacy-peer-deps', pluginName]); } catch (err) { logger.error(`Failed to uninstall plugin ${pluginName}`); cb(err || new Error(err)); @@ -53,7 +53,7 @@ exports.install = async (pluginName, cb = null) => { // The --no-save flag prevents npm from creating package.json or package-lock.json. // The --legacy-peer-deps flag is required to work around a bug in npm v7: // https://github.com/npm/cli/issues/2199 - await runCmd(['npm', 'install', '--no-save', '--legacy-peer-deps', pluginName]); + await runCmd(['bun', 'install', '--no-save', '--legacy-peer-deps', pluginName]); } catch (err) { logger.error(`Failed to install plugin ${pluginName}`); cb(err || new Error(err)); @@ -72,19 +72,19 @@ exports.getAvailablePlugins = (maxCacheAge) => { const nowTimestamp = Math.round(Date.now() / 1000); return new Promise(async (resolve, reject) => { - // check cache age before making any request - if (exports.availablePlugins && maxCacheAge && (nowTimestamp - cacheTimestamp) <= maxCacheAge) { - return resolve(exports.availablePlugins); - } + // check cache age before making any request + if (exports.availablePlugins && maxCacheAge && (nowTimestamp - cacheTimestamp) <= maxCacheAge) { + return resolve(exports.availablePlugins); + } - await axios.get('https://static.etherpad.org/plugins.json') - .then(pluginsLoaded => { - exports.availablePlugins = pluginsLoaded.data; - cacheTimestamp = nowTimestamp; - resolve(exports.availablePlugins); - }) - }) -} + await axios.get('https://static.etherpad.org/plugins.json') + .then((pluginsLoaded) => { + exports.availablePlugins = pluginsLoaded.data; + cacheTimestamp = nowTimestamp; + resolve(exports.availablePlugins); + }); + }); +}; exports.search = (searchTerm, maxCacheAge) => exports.getAvailablePlugins(maxCacheAge).then( diff --git a/src/static/js/pluginfw/plugins.js b/src/static/js/pluginfw/plugins.js index e7ac500c3..73b72acf8 100644 --- a/src/static/js/pluginfw/plugins.js +++ b/src/static/js/pluginfw/plugins.js @@ -8,6 +8,7 @@ const runCmd = require('../../../node/utils/run_cmd'); const tsort = require('./tsort'); const pluginUtils = require('./shared'); const defs = require('./plugin_defs'); +const {cwd} = require("os"); const logger = log4js.getLogger('plugins'); @@ -111,16 +112,33 @@ exports.getPackages = async () => { // * The `--no-production` flag is required (or the `NODE_ENV` environment variable must be // unset or set to `development`) because otherwise `npm ls` will not mention any packages // that are not included in `package.json` (which is expected to not exist). - const cmd = ['npm', 'ls', '--long', '--json', '--depth=0', '--no-production']; - const {dependencies = {}} = JSON.parse(await runCmd(cmd, {stdio: [null, 'string']})); - await Promise.all(Object.entries(dependencies).map(async ([pkg, info]) => { - if (!pkg.startsWith(exports.prefix)) { - delete dependencies[pkg]; - return; - } - info.realPath = await fs.realpath(info.path); - })); - return dependencies; + const commandExists = require('command-exists').sync; + if (commandExists('bun')) { + const file = Bun.readFile('package.json'); + + const text = await file.text(); + const parsedJSON = JSON.parse(text); + const dependencies = parsedJSON.dependencies; + await Promise.all(Object.entries(dependencies).map(async (pkg) => { + const info = Object(); + if (!pkg.startsWith(exports.prefix)) { + delete dependencies[pkg]; + return; + } + info.realPath = `${cwd}/node_modules/${pkg}`; + })); + } else { + const cmd = ['npm', 'ls', '--long', '--json', '--depth=0', '--no-production']; + const {dependencies = {}} = JSON.parse(await runCmd(cmd, {stdio: [null, 'string']})); + await Promise.all(Object.entries(dependencies).map(async ([pkg, info]) => { + if (!pkg.startsWith(exports.prefix)) { + delete dependencies[pkg]; + return; + } + info.realPath = await fs.realpath(info.path); + })); + return dependencies; + } }; const loadPlugin = async (packages, pluginName, plugins, parts) => {