remove semver dependency for plugins
Signed-off-by: si458 <simonsmith5521@gmail.com>
si458 committed
Jun 10, 2025 at 18:01 UTC
960326ab40754351c5eba386765a01340cbc2b50
4 files changed
+34
-7
docker/Dockerfile
+1
-1
@@ -121,7 +121,7 @@ RUN case "$PREINSTALL_LIBS" in \
121
true|yes|TRUE|YES) \
122
cd meshcentral && \
123
echo -e "----------\nPREINSTALLING LIBRARIES...\n----------"; \
124
- npm install ssh2@1.16.0 semver@7.7.1 nodemailer@6.10.0 image-size@2.0.1 wildleek@2.0.0 otplib@12.0.1 yubikeyotp@0.2.0;; \
124
+ npm install ssh2@1.16.0 nodemailer@6.10.0 image-size@2.0.1 wildleek@2.0.0 otplib@12.0.1 yubikeyotp@0.2.0;; \
125
false|no|FALSE|NO) \
126
echo "Not pre-installing libraries.";; \
127
*) \
docker/README.md
+1
-1
@@ -174,7 +174,7 @@ The following build arguments are available for customizing the build process:
174
- **INCLUDE_MONGODB_TOOLS**: Include MongoDB client and related tools.
175
- **INCLUDE_POSTGRESQL_TOOLS**: Include PostgreSQL client tools.
176
- **INCLUDE_MARIADB_TOOLS**: Include MariaDB/MySQL client tools.
177
-- **PREINSTALL_LIBS**: Pre-install specific libraries like `ssh2`, `semver`, `nodemailer`, etc.
177
+- **PREINSTALL_LIBS**: Pre-install specific libraries like `ssh2`, `nodemailer`, etc.
178
179
### Build Commands with Arguments
180
meshcentral.js
-1
@@ -4311,7 +4311,6 @@ function mainStart() {
4311
if (config.settings.acebase != null) { modules.push('acebase@1.29.5'); } // Add AceBase, official driver.
4312
if (config.settings.sqlite3 != null) { modules.push('sqlite3@5.1.7'); } // Add sqlite3, official driver.
4313
if (config.settings.vault != null) { modules.push('node-vault@0.10.2'); } // Add official HashiCorp's Vault module.
4314
- if ((config.settings.plugins != null) && (config.settings.plugins != false) && ((typeof config.settings.plugins != 'object') || (config.settings.plugins.enabled != false))) { modules.push('semver@7.7.1'); } // Required for version compat testing and update checks
4314
if ((config.settings.plugins != null) && (config.settings.plugins.proxy != null)) { modules.push('https-proxy-agent@7.0.2'); } // Required for HTTP/HTTPS proxy support
4315
else if (config.settings.xmongodb != null) { modules.push('mongojs@3.1.0'); } // Add MongoJS, old driver.
4316
if (nodemailer || ((config.smtp != null) && (config.smtp.name != 'console')) || (config.sendmail != null)) { modules.push('nodemailer@6.9.16'); } // Add SMTP support
pluginHandler.js
+32
-4
@@ -286,6 +286,36 @@ module.exports.pluginHandler = function (parent) {
286
return true;
287
}
288
289
+ obj.versionGreater = function(a, b) {
290
+ a = obj.versionToNumber(String(a).replace(/^v/, ''));
291
+ b = obj.versionToNumber(String(b).replace(/^v/, ''));
292
+ const partsA = a.split('.').map(Number);
293
+ const partsB = b.split('.').map(Number);
294
+
295
+ for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
296
+ const numA = partsA[i] || 0;
297
+ const numB = partsB[i] || 0;
298
+ if (numA > numB) return true;
299
+ if (numA < numB) return false;
300
+ }
301
+ return false;
302
+ };
303
+
304
+ obj.versionLower = function(a, b) {
305
+ a = obj.versionToNumber(String(a).replace(/^v/, ''));
306
+ b = obj.versionToNumber(String(b).replace(/^v/, ''));
307
+ const partsA = a.split('.').map(Number);
308
+ const partsB = b.split('.').map(Number);
309
+
310
+ for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
311
+ const numA = partsA[i] || 0;
312
+ const numB = partsB[i] || 0;
313
+ if (numA < numB) return true;
314
+ if (numA > numB) return false;
315
+ }
316
+ return false;
317
+ };
318
+
319
obj.getPluginLatest = function () {
320
return new Promise(function (resolve, reject) {
321
parent.db.getPlugins(function (err, plugins) {
@@ -305,12 +335,11 @@ module.exports.pluginHandler = function (parent) {
335
if (conf.configUrl == newconf.configUrl) curconf = conf;
336
});
337
if (curconf == null) reject("Some plugin configs could not be parsed");
308
- var s = require('semver');
338
latestRet.push({
339
'id': curconf._id,
340
'installedVersion': curconf.version,
341
'version': newconf.version,
313
- 'hasUpdate': s.gt(newconf.version, curconf.version),
342
+ 'hasUpdate': obj.versionGreater(newconf.version, curconf.version),
343
'meshCentralCompat': obj.versionCompare(parent.currentVer, newconf.meshCentralCompat),
344
'changelogUrl': curconf.changelogUrl,
345
'status': curconf.status
@@ -484,9 +513,8 @@ module.exports.pluginHandler = function (parent) {
513
try {
514
var vers = JSON.parse(versStr);
515
var vList = [];
487
- var s = require('semver');
516
vers.forEach((v) => {
489
- if (s.lt(v.name, plugin.version)) vList.push(v);
517
+ if (obj.versionLower(v.name, plugin.version)) vList.push(v);
518
});
519
if (vers.length == 0) reject("No previous versions available.");
520
resolve({ 'id': plugin._id, 'name': plugin.name, versionList: vList });