1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
function main(config, profileName) { const BUILTIN_IN_GROUP = new Set(["DIRECT", "REJECT", "REJECT-DROP", "PASS", "COMPATIBLE"]);
const includeFilters = /SG|JP|HK|3x US/i; const excludeFilters = /5x|10x/i;
function toRegExp(pattern) { if (pattern == null || pattern === "") return null; if (pattern instanceof RegExp) return pattern; try { return new RegExp(String(pattern)); } catch { return null; } }
function passesInclude(name, pattern) { const re = toRegExp(pattern); if (!re || re.source === "") return true; try { return re.test(name); } catch { return true; } }
function hitsExclude(name, pattern) { const re = toRegExp(pattern); if (!re || re.source === "") return false; try { return re.test(name); } catch { return false; } }
const filteredProxies = config.proxies.filter((proxy) => { return passesInclude(proxy.name, includeFilters) && !hitsExclude(proxy.name, excludeFilters); });
const filteredProxyNames = new Set(filteredProxies.map((p) => p.name));
config.proxies = filteredProxies;
if (config["proxy-groups"]) { const groupNames = new Set(config["proxy-groups"].map((g) => g.name));
config["proxy-groups"].forEach((group) => { if (group.proxies) { group.proxies = group.proxies.filter((pName) => { if (BUILTIN_IN_GROUP.has(pName)) return true; const isAnotherGroup = groupNames.has(pName); const isExistingProxy = filteredProxyNames.has(pName); return isAnotherGroup || isExistingProxy; });
if (group.proxies.length === 0) { group.proxies.push("DIRECT"); } } }); }
return config; }
|