UNPKG

@alltiptop/geoip-3xui-rules

Version:

Middleware server to set routing rules by countries for XRAY

45 lines (44 loc) 1.47 kB
export const removeDuplicateRules = (json) => { const rules = json.routing?.rules; if (!rules) return json; const seenRules = new Set(); const finalRules = []; for (const originalRule of rules) { const rule = JSON.parse(JSON.stringify(originalRule)); const hadDomains = Array.isArray(rule.domain); const hadIps = Array.isArray(rule.ip); if (hadDomains) { rule.domain = rule.domain.filter((d) => { if (seenRules.has(d)) return false; seenRules.add(d); return true; }); } if (hadIps) { rule.ip = rule.ip.filter((i) => { if (seenRules.has(i)) return false; seenRules.add(i); return true; }); } const hasDomainsNow = hadDomains && rule.domain.length > 0; const hasIpsNow = hadIps && rule.ip.length > 0; // A rule object that originally had domain/ip rules is removed if both lists become empty. // A rule object that never had domain/ip rules is kept. if ((hadDomains || hadIps) && !hasDomainsNow && !hasIpsNow) { // This rule became empty, so we skip it. continue; } finalRules.push(rule); } return { ...json, routing: { ...json.routing, rules: finalRules, }, }; };