fix(app): deduplicate and merge server connections in resolveServerList (#29313)

This commit is contained in:
Brendan Allan
2026-05-26 13:41:13 +08:00
committed by GitHub
parent dbb7872326
commit 49707c2117
+18 -12
View File
@@ -36,24 +36,30 @@ export function resolveServerList(input: {
props?: Array<ServerConnection.Any> props?: Array<ServerConnection.Any>
stored: StoredServer[] stored: StoredServer[]
}): Array<ServerConnection.Any> { }): Array<ServerConnection.Any> {
const servers = [ const deduped = new Map<ServerConnection.Key, ServerConnection.Any>(
...(input.props ?? []), input.props?.map((v) => [ServerConnection.key(v), v]) ?? [],
...input.stored.map((value) => )
for (const value of input.stored) {
const conn: ServerConnection.Http =
typeof value === "string" typeof value === "string"
? { ? {
type: "http" as const, type: "http" as const,
http: { url: value }, http: { url: value },
} }
: value, : "http" in value
), ? value
] : { type: "http", http: value }
const deduped = new Map<ServerConnection.Key, ServerConnection.Any>()
for (const value of servers) {
const conn: ServerConnection.Any = "type" in value ? value : { type: "http", http: value }
const key = ServerConnection.key(conn) const key = ServerConnection.key(conn)
if (deduped.has(key) && conn.type === "http" && !conn.authToken) continue
deduped.set(key, conn) const existing = deduped.get(key)
if (existing)
deduped.set(key, {
...existing,
...conn,
http: { ...existing.http, ...conn.http },
})
else deduped.set(key, conn)
} }
return [...deduped.values()] return [...deduped.values()]