mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-07 02:37:14 +00:00
814369da38
internal/config/version was never bumped past 3.5.0 when v3.5.0-awg.1 was tagged, so a freshly-updated panel kept reporting its own version as the plain upstream base. On top of that, parseVersionParts (Go and its TypeScript mirror) required exactly 3 dot-separated numeric parts, so it rejected the -awg.N suffix entirely and fell back to a raw string inequality that reports "update available" any time the strings merely differ -- which they always do here, even when already on the latest tag. Bump the embedded version to 3.5.0-awg.1 and extend both parsers to treat "-awg.N" as an optional 4th, lower-priority component (defaulting to 0 for a plain tag), so e.g. 3.5.0-awg.2 > 3.5.0-awg.1 > 3.5.0 and a matching tag compares equal instead of always looking outdated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
40 lines
1.7 KiB
TypeScript
40 lines
1.7 KiB
TypeScript
// Mirror of web/service/panel.go isNewerVersion: parse a vMAJOR.MINOR.PATCH tag
|
|
// (or this fork's own "vMAJOR.MINOR.PATCH-awg.N" release tag, see
|
|
// internal/config/version) and report whether `latest` is ahead of `current`.
|
|
// When either side isn't a recognized tag, fall back to a normalized string
|
|
// inequality — the same heuristic the Go side uses so the node "update
|
|
// available" badge agrees with what the server would decide.
|
|
const VERSION_PARTS_PATTERN = /^v?(\d+)\.(\d+)\.(\d+)(?:-awg\.(\d+))?$/;
|
|
|
|
function parseVersionParts(version: string): [number, number, number, number] | null {
|
|
const match = VERSION_PARTS_PATTERN.exec(version.trim());
|
|
if (!match) return null;
|
|
return [Number(match[1]), Number(match[2]), Number(match[3]), Number(match[4] || 0)];
|
|
}
|
|
|
|
// Format a panel version for display. Dev builds report a "dev+<commit>"
|
|
// identity (see config.GetPanelVersion); show those — and any other
|
|
// non-numeric label — verbatim. Semantic versions get a single normalized "v"
|
|
// prefix, so a raw "v3.4.0" tag and a bare "3.4.0" both render as "v3.4.0"
|
|
// instead of doubling up to "vv3.4.0".
|
|
export function formatPanelVersion(version: string | undefined | null): string {
|
|
const v = (version || '').trim();
|
|
if (!v) return '';
|
|
const normalized = v.replace(/^v/i, '');
|
|
return /^\d/.test(normalized) ? `v${normalized}` : v;
|
|
}
|
|
|
|
export function isPanelUpdateAvailable(latest: string, current: string): boolean {
|
|
if (!latest || !current) return false;
|
|
const a = parseVersionParts(latest);
|
|
const b = parseVersionParts(current);
|
|
if (!a || !b) {
|
|
return latest.trim().replace(/^v/, '') !== current.trim().replace(/^v/, '');
|
|
}
|
|
for (let i = 0; i < 4; i++) {
|
|
if (a[i] > b[i]) return true;
|
|
if (a[i] < b[i]) return false;
|
|
}
|
|
return false;
|
|
}
|