mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 21:49:52 +00:00
71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
import { useRequest } from "ahooks";
|
|
|
|
import { version } from "@/domain/version";
|
|
|
|
export type UseVersionCheckerReturns = {
|
|
hasNewVersion: boolean;
|
|
checkNewVersion: () => void;
|
|
};
|
|
|
|
const extractSemver = (vers: string) => {
|
|
let semver = String(vers ?? "");
|
|
semver = semver.replace(/^v/i, "");
|
|
semver = semver.split("-")[0];
|
|
return semver;
|
|
};
|
|
|
|
const compareVersions = (a: string, b: string) => {
|
|
const aSemver = extractSemver(a);
|
|
const bSemver = extractSemver(b);
|
|
const aSemverParts = aSemver.split(".");
|
|
const bSemverParts = bSemver.split(".");
|
|
|
|
const len = Math.max(aSemverParts.length, bSemverParts.length);
|
|
for (let i = 0; i < len; i++) {
|
|
const aPart = parseInt(aSemverParts[i] ?? "0");
|
|
const bPart = parseInt(bSemverParts[i] ?? "0");
|
|
if (aPart > bPart) return 1;
|
|
if (bPart > aPart) return -1;
|
|
}
|
|
|
|
return 0;
|
|
};
|
|
|
|
/**
|
|
* 获取版本检查器。
|
|
* @returns {UseVersionCheckerReturns}
|
|
*/
|
|
const useVersionChecker = () => {
|
|
const { data, refresh } = useRequest(
|
|
async () => {
|
|
const releases = await fetch("https://api.github.com/repos/usual2970/certimate/releases")
|
|
.then((res) => res.json())
|
|
.then((res) => Array.from(res));
|
|
|
|
const cIdx = releases.findIndex((e: any) => e.name === version);
|
|
if (cIdx === 0) {
|
|
return false;
|
|
}
|
|
|
|
const nIdx = releases.findIndex((e: any) => compareVersions(e.name, version) !== -1);
|
|
if (cIdx !== -1 && cIdx <= nIdx) {
|
|
return false;
|
|
}
|
|
|
|
return !!releases[nIdx];
|
|
},
|
|
{
|
|
pollingInterval: 6 * 60 * 60 * 1000,
|
|
refreshOnWindowFocus: true,
|
|
focusTimespan: 15 * 60 * 1000,
|
|
}
|
|
);
|
|
|
|
return {
|
|
hasNewVersion: !!data,
|
|
checkNewVersion: refresh,
|
|
};
|
|
};
|
|
|
|
export default useVersionChecker;
|