diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx index 7756d8057..4b52ace99 100644 --- a/src/pages/_layout.tsx +++ b/src/pages/_layout.tsx @@ -24,10 +24,6 @@ import useCustomTheme from "@/components/layout/use-custom-theme"; import getSystem from "@/utils/get-system"; import "dayjs/locale/zh-cn"; -declare global { - const WIN_PORTABLE: boolean; -} - dayjs.extend(relativeTime); const OS = getSystem(); diff --git a/src/services/types.d.ts b/src/services/types.d.ts index de3541d75..749cffde8 100644 --- a/src/services/types.d.ts +++ b/src/services/types.d.ts @@ -1,3 +1,22 @@ +type Platform = + | "aix" + | "android" + | "darwin" + | "freebsd" + | "haiku" + | "linux" + | "openbsd" + | "sunos" + | "win32" + | "cygwin" + | "netbsd"; + +/** + * defines in `vite.config.ts` + */ +declare const WIN_PORTABLE: boolean; +declare const OS_PLATFORM: Platform; + /** * Some interface for clash api */ diff --git a/src/utils/get-system.ts b/src/utils/get-system.ts index 880161700..891770329 100644 --- a/src/utils/get-system.ts +++ b/src/utils/get-system.ts @@ -2,10 +2,11 @@ // according to UA export default function getSystem() { const ua = navigator.userAgent; + const platform = OS_PLATFORM; - if (ua.includes("Mac OS X")) return "macos"; + if (ua.includes("Mac OS X") || platform === "darwin") return "macos"; - if (/win64|win32/i.test(ua)) return "windows"; + if (/win64|win32/i.test(ua) || platform === "win32") return "windows"; if (/linux/i.test(ua)) return "linux"; diff --git a/vite.config.ts b/vite.config.ts index 4a51b767c..0315d7692 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -24,6 +24,7 @@ export default defineConfig({ }, }, define: { + OS_PLATFORM: `"${process.platform}"`, WIN_PORTABLE: !!process.env.VITE_WIN_PORTABLE, }, });