Improve request trace upstream diagnostics

This commit is contained in:
fawney19
2026-05-09 10:46:04 +08:00
parent 4cf0de681a
commit 79d07ac79a
33 changed files with 2315 additions and 427 deletions

View File

@@ -25,12 +25,42 @@ const applyDarkMode = (value: boolean) => {
}
const getSystemPreference = (): boolean => {
if (typeof window === 'undefined') {
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
return false
}
return window.matchMedia('(prefers-color-scheme: dark)').matches
}
const getThemeStorage = (): Storage | null => {
if (typeof window === 'undefined') {
return null
}
const storage = window.localStorage
if (!storage || typeof storage.getItem !== 'function' || typeof storage.setItem !== 'function') {
return null
}
return storage
}
const readStoredTheme = (): ThemeMode | null => {
try {
const value = getThemeStorage()?.getItem(THEME_STORAGE_KEY)
return value === 'dark' || value === 'light' || value === 'system' ? value : null
} catch {
return null
}
}
const writeStoredTheme = (value: ThemeMode) => {
try {
getThemeStorage()?.setItem(THEME_STORAGE_KEY, value)
} catch {
// Ignore storage failures in restricted or test-like environments.
}
}
const updateDarkMode = () => {
if (themeMode.value === 'system') {
isDark.value = getSystemPreference()
@@ -59,9 +89,7 @@ const ensureWatcher = () => {
(value) => {
updateDarkMode()
if (typeof window !== 'undefined') {
localStorage.setItem(THEME_STORAGE_KEY, value)
}
writeStoredTheme(value)
},
{ flush: 'post' }
)
@@ -77,9 +105,9 @@ const initialize = () => {
ensureWatcher()
if (typeof window !== 'undefined') {
const storedTheme = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null
const storedTheme = readStoredTheme()
if (storedTheme === 'dark' || storedTheme === 'light' || storedTheme === 'system') {
if (storedTheme) {
themeMode.value = storedTheme
} else {
// 兼容旧版本存储格式,旧版本直接存储 'dark' 或 'light'
@@ -87,8 +115,10 @@ const initialize = () => {
}
// 监听系统主题变化
mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
mediaQuery.addEventListener('change', handleSystemChange)
if (typeof window.matchMedia === 'function') {
mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
mediaQuery.addEventListener('change', handleSystemChange)
}
}
updateDarkMode()