(
sources: Array<{ platform: string; members: MergerMember[] }>,
collidingIds: Set<string>
)
| 188 | // ==================== Member merge ==================== |
| 189 | |
| 190 | export function mergeMembers( |
| 191 | sources: Array<{ platform: string; members: MergerMember[] }>, |
| 192 | collidingIds: Set<string> |
| 193 | ): Map<string, MergedMember> { |
| 194 | const map = new Map<string, MergedMember>() |
| 195 | for (const { platform, members } of sources) { |
| 196 | const p = platform || 'unknown' |
| 197 | for (const m of members) { |
| 198 | const nid = normalizePlatformId(m.platformId, p, collidingIds) |
| 199 | const existing = map.get(nid) |
| 200 | if (existing) { |
| 201 | if (m.accountName) existing.accountName = m.accountName |
| 202 | if (m.groupNickname) existing.groupNickname = m.groupNickname |
| 203 | if (m.avatar) existing.avatar = m.avatar |
| 204 | } else { |
| 205 | map.set(nid, { |
| 206 | platformId: nid, |
| 207 | accountName: m.accountName, |
| 208 | groupNickname: m.groupNickname, |
| 209 | avatar: m.avatar, |
| 210 | }) |
| 211 | } |
| 212 | } |
| 213 | } |
| 214 | return map |
| 215 | } |
| 216 | |
| 217 | // ==================== Message dedup + sort ==================== |
| 218 |
no test coverage detected