From ce453098189f700e64a6be582f69f955e22332dc Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Feb 2025 21:15:47 +0200 Subject: [PATCH] feat(deps): remove dependency on semver --- package-lock.json | 9 --------- package.json | 2 -- src/services/utils.ts | 45 ++++++++++++++++++++++++++++++++++++++++++- src/www.ts | 7 ++++--- 4 files changed, 48 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index a62688b2e..382a2088a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,6 @@ "sanitize-filename": "1.6.3", "sanitize-html": "2.14.0", "sax": "1.4.1", - "semver": "7.7.1", "serve-favicon": "2.5.0", "session-file-store": "1.5.0", "source-map-support": "0.5.21", @@ -141,7 +140,6 @@ "@types/safe-compare": "1.1.2", "@types/sanitize-html": "2.13.0", "@types/sax": "1.2.7", - "@types/semver": "7.5.8", "@types/serve-favicon": "2.5.7", "@types/session-file-store": "1.2.5", "@types/source-map-support": "0.5.10", @@ -4002,13 +4000,6 @@ "@types/node": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", diff --git a/package.json b/package.json index 01cd709bd..edbe5beb3 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,6 @@ "sanitize-filename": "1.6.3", "sanitize-html": "2.14.0", "sax": "1.4.1", - "semver": "7.7.1", "serve-favicon": "2.5.0", "session-file-store": "1.5.0", "source-map-support": "0.5.21", @@ -183,7 +182,6 @@ "@types/safe-compare": "1.1.2", "@types/sanitize-html": "2.13.0", "@types/sax": "1.2.7", - "@types/semver": "7.5.8", "@types/serve-favicon": "2.5.7", "@types/session-file-store": "1.2.5", "@types/source-map-support": "0.5.10", diff --git a/src/services/utils.ts b/src/services/utils.ts index b00c1e488..b4d7ad67c 100644 --- a/src/services/utils.ts +++ b/src/services/utils.ts @@ -324,6 +324,48 @@ export function getResourceDir() { } } +// TODO: Deduplicate with src/public/app/services/utils.ts +/** + * Compares two semantic version strings. + * Returns: + * 1 if v1 is greater than v2 + * 0 if v1 is equal to v2 + * -1 if v1 is less than v2 + * + * @param v1 First version string + * @param v2 Second version string + * @returns + */ +function compareVersions(v1: string, v2: string): number { + // Remove 'v' prefix and everything after dash if present + v1 = v1.replace(/^v/, "").split("-")[0]; + v2 = v2.replace(/^v/, "").split("-")[0]; + + const v1parts = v1.split(".").map(Number); + const v2parts = v2.split(".").map(Number); + + // Pad shorter version with zeros + while (v1parts.length < 3) v1parts.push(0); + while (v2parts.length < 3) v2parts.push(0); + + // Compare major version + if (v1parts[0] !== v2parts[0]) { + return v1parts[0] > v2parts[0] ? 1 : -1; + } + + // Compare minor version + if (v1parts[1] !== v2parts[1]) { + return v1parts[1] > v2parts[1] ? 1 : -1; + } + + // Compare patch version + if (v1parts[2] !== v2parts[2]) { + return v1parts[2] > v2parts[2] ? 1 : -1; + } + + return 0; +} + export default { randomSecureToken, randomString, @@ -360,5 +402,6 @@ export default { getResourceDir, isMac, isWindows, - envToBoolean + envToBoolean, + compareVersions }; diff --git a/src/www.ts b/src/www.ts index 258f0f272..d442ba35f 100644 --- a/src/www.ts +++ b/src/www.ts @@ -12,7 +12,8 @@ import ws from "./services/ws.js"; import utils from "./services/utils.js"; import port from "./services/port.js"; import host from "./services/host.js"; -import semver from "semver"; + +const MINIMUM_NODE_VERSION = "22.0.0"; // setup basic error handling even before requiring dependencies, since those can produce errors as well @@ -32,8 +33,8 @@ function exit() { process.on("SIGINT", exit); process.on("SIGTERM", exit); -if (!semver.satisfies(process.version, ">=10.5.0")) { - console.error("Trilium only supports node.js 10.5 and later"); +if (utils.compareVersions(process.version, MINIMUM_NODE_VERSION) < 0) { + console.error(`\nTrilium requires Node.js ${MINIMUM_NODE_VERSION} and later.\n`); process.exit(1); }