diff --git a/lib/api/routes/versionRouter.js b/lib/api/routes/versionRouter.js index 1db98a3..c42ee55 100644 --- a/lib/api/routes/versionRouter.js +++ b/lib/api/routes/versionRouter.js @@ -5,6 +5,22 @@ import { getPackageVersion } from '../../utils.js'; const service = restana(); const versionRouter = service.newRouter(); +/** + * Converts a dotted numeric string (e.g., '12.2.1.2') into a single integer (e.g., 12212). + * Null safe: returns null for null/undefined/empty or non-numeric input. + * Non-digits are removed; separators like '.' or '-' are ignored. + * + * @param {string|number|null|undefined} input + * @returns {number|null} + */ +const toCompactNumber = (input) => { + if (input == null) return null; + const joined = String(input).match(/\d+/g)?.join('') ?? ''; + if (joined === '') return null; + const n = Number(joined); + return Number.isFinite(n) ? n : null; +}; + versionRouter.get('/', async (req, res) => { const versionPayload = await getCurrentVersionFromGithub(); res.body = versionPayload == null ? { newVersion: false } : versionPayload; @@ -15,7 +31,7 @@ async function getCurrentVersionFromGithub() { const raw = await fetch('https://api.github.com/repos/orangecoding/fredy/releases/latest'); const data = await raw.json(); const localFredyVersion = await getPackageVersion(); - if (localFredyVersion === data.tag_name) { + if (data.tag_name == null || toCompactNumber(localFredyVersion) >= toCompactNumber(data.tag_name)) { return null; } return { diff --git a/package.json b/package.json index f1e94f9..2f36ee8 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fredy", - "version": "12.2.0", + "version": "12.2.1", "description": "[F]ind [R]eal [E]states [d]amn eas[y].", "scripts": { "prepare": "husky", diff --git a/ui/src/components/version/VersionBanner.jsx b/ui/src/components/version/VersionBanner.jsx index 24e8e72..4036c0a 100644 --- a/ui/src/components/version/VersionBanner.jsx +++ b/ui/src/components/version/VersionBanner.jsx @@ -1,6 +1,7 @@ import React from 'react'; import { Banner, Descriptions } from '@douyinfe/semi-ui'; import { useSelector } from '../../services/state/store.js'; +import { MarkdownRender } from '@douyinfe/semi-ui'; import './VersionBanner.less'; @@ -12,7 +13,7 @@ export default function VersionBanner() { type="success" icon={null} description={ -
A new version of Fredy is available. Update now to take advantage of the latest features and bug fixes.
{stripFullChangelog(versionUpdate.body)}
+