mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-26 20:50:30 +08:00
- 新增DNS回退服务器配置界面和多语言支持 - 修复DNS配置合并逻辑,确保fallback始终为空数组 - 解决订阅fallback配置导致的双重DNS查询性能问题 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com>
51 lines
2.0 KiB
TypeScript
51 lines
2.0 KiB
TypeScript
import { controledMihomoConfigPath } from '../utils/dirs'
|
||
import { readFile, writeFile } from 'fs/promises'
|
||
import yaml from 'yaml'
|
||
import { generateProfile } from '../core/factory'
|
||
import { getAppConfig } from './app'
|
||
import { defaultControledMihomoConfig } from '../utils/template'
|
||
import { deepMerge } from '../utils/merge'
|
||
|
||
let controledMihomoConfig: Partial<IMihomoConfig> // mihomo.yaml
|
||
|
||
export async function getControledMihomoConfig(force = false): Promise<Partial<IMihomoConfig>> {
|
||
if (force || !controledMihomoConfig) {
|
||
const data = await readFile(controledMihomoConfigPath(), 'utf-8')
|
||
controledMihomoConfig = yaml.parse(data, { merge: true }) || defaultControledMihomoConfig
|
||
|
||
// 确保配置包含所有必要的默认字段,处理升级场景
|
||
controledMihomoConfig = deepMerge(defaultControledMihomoConfig, controledMihomoConfig)
|
||
}
|
||
if (typeof controledMihomoConfig !== 'object')
|
||
controledMihomoConfig = defaultControledMihomoConfig
|
||
return controledMihomoConfig
|
||
}
|
||
|
||
export async function patchControledMihomoConfig(patch: Partial<IMihomoConfig>): Promise<void> {
|
||
const { controlDns = true, controlSniff = true } = await getAppConfig()
|
||
|
||
if (patch.hosts) {
|
||
controledMihomoConfig.hosts = patch.hosts
|
||
}
|
||
if (patch.dns?.['nameserver-policy']) {
|
||
controledMihomoConfig.dns = controledMihomoConfig.dns || {}
|
||
controledMihomoConfig.dns['nameserver-policy'] = patch.dns['nameserver-policy']
|
||
}
|
||
controledMihomoConfig = deepMerge(controledMihomoConfig, patch)
|
||
|
||
// 从不接管状态恢复
|
||
if (controlDns) {
|
||
// 确保DNS配置包含所有必要的默认字段,特别是新增的fallback等
|
||
controledMihomoConfig.dns = deepMerge(
|
||
defaultControledMihomoConfig.dns || {},
|
||
controledMihomoConfig.dns || {}
|
||
)
|
||
}
|
||
if (controlSniff && !controledMihomoConfig.sniffer) {
|
||
controledMihomoConfig.sniffer = defaultControledMihomoConfig.sniffer
|
||
}
|
||
|
||
await generateProfile()
|
||
await writeFile(controledMihomoConfigPath(), yaml.stringify(controledMihomoConfig), 'utf-8')
|
||
}
|