ACT丶流星雨 1a49e2f8d5 完成更新
2026-04-02 17:28:44 +08:00

67 lines
2.4 KiB
TypeScript

import express from "express";
import { success, error } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
import { z } from "zod";
const router = express.Router();
import fs from "fs";
import path from "path";
declare const __APP_VERSION__: string | undefined;
const APP_VERSION: string = (() => {
if (typeof __APP_VERSION__ !== "undefined") {
return __APP_VERSION__;
}
// 开发环境回退:从 package.json 读取
const pkgPath = path.resolve(process.cwd(), "package.json");
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
return pkg.version;
})();
export default router.post(
"/",
validateFields({
source: z.enum(["toonflow", "github", "gitee", "atomgit"]),
}),
async (req, res) => {
const { source } = req.body;
const getUrl: any = {
toonflow: "http://localhost:5173/update.json",
github: "https://api.github.com/repos/toonflow/toonflow/releases/latest",
gitee: "https://gitee.com/api/v5/repos/toonflow/toonflow/releases/latest",
atomgit: "https://api.github.com/repos/atomgit/atomgit/releases/latest",
};
const vsersion = await fetch(getUrl[source]).then((res) => res.json());
if (!vsersion) return res.status(400).send(error("无法获取版本信息"));
const { version: tagger, time, data } = vsersion;
const platformType: Record<string, string> = {
win32: "windows",
darwin: "macos",
linux: "linux",
};
const zipItem = data.find((d: any) => d.type === "zip");
const installerItem = data.find((d: any) => d.type === platformType[process.platform]);
const taggerList = tagger.split(".").map(Number);
const currentVersionList = APP_VERSION.split(".").map(Number);
//对比Major
if (taggerList[0] > currentVersionList[0]) {
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true, time, url: installerItem?.url }));
}
//对比Minor
if (taggerList[1] > currentVersionList[1]) {
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true, time, url: installerItem?.url }));
}
//Patch
if (taggerList[2] > currentVersionList[2]) {
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: false, time, url: zipItem?.url }));
}
return res.status(200).send(success({ needUpdate: false, latestVersion: tagger, reinstall: false, time }));
},
);