Fix ruleset processing

This commit is contained in:
SukkaW 2024-09-16 00:35:28 +08:00
parent 33788588f0
commit 16ca72b35f
2 changed files with 71 additions and 70 deletions

View File

@ -134,7 +134,6 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
// exclude keyword when creating trie // exclude keyword when creating trie
if (!kwfilter(domain)) { if (!kwfilter(domain)) {
baseTrie.add(domain); baseTrie.add(domain);
extraTrie.whitelist(domain); extraTrie.whitelist(domain);
} }
} }
@ -149,17 +148,17 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
}); });
// Dedupe domainSets // Dedupe domainSets
const dudupedDominArray = span.traceChildSync('dedupe from covered subdomain (base)', () => domainsetDeduper(baseTrie)); const dedupedDominArray = span.traceChildSync('dedupe from covered subdomain (base)', () => domainsetDeduper(baseTrie));
const dudupedDominArrayExtra = span.traceChildSync('dedupe from covered subdomain (extra)', () => domainsetDeduper(extraTrie)); const dudupedDominArrayExtra = span.traceChildSync('dedupe from covered subdomain (extra)', () => domainsetDeduper(extraTrie));
console.log(`Final size ${dudupedDominArray.length} + ${dudupedDominArrayExtra.length}`); console.log(`Final size ${dedupedDominArray.length} + ${dudupedDominArrayExtra.length}`);
const { const {
domainMap: domainArrayMainDomainMap, domainMap: domainArrayMainDomainMap,
subdomainMap: domainArraySubdomainMap subdomainMap: domainArraySubdomainMap
} = span.traceChildSync( } = span.traceChildSync(
'build map for stat and sort', 'build map for stat and sort',
() => buildParseDomainMap(dudupedDominArray.concat(dudupedDominArrayExtra)) () => buildParseDomainMap(dedupedDominArray.concat(dudupedDominArrayExtra))
); );
// Create reject stats // Create reject stats
@ -168,7 +167,7 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
.traceSyncFn(() => { .traceSyncFn(() => {
const results = []; const results = [];
results.push('=== base ==='); results.push('=== base ===');
appendArrayInPlace(results, getStatMap(dudupedDominArray, domainArrayMainDomainMap)); appendArrayInPlace(results, getStatMap(dedupedDominArray, domainArrayMainDomainMap));
results.push('=== extra ==='); results.push('=== extra ===');
appendArrayInPlace(results, getStatMap(dudupedDominArrayExtra, domainArrayMainDomainMap)); appendArrayInPlace(results, getStatMap(dudupedDominArrayExtra, domainArrayMainDomainMap));
return results; return results;
@ -189,7 +188,7 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
...ADGUARD_FILTERS.map(filter => ` - ${Array.isArray(filter) ? filter[0] : filter}`) ...ADGUARD_FILTERS.map(filter => ` - ${Array.isArray(filter) ? filter[0] : filter}`)
], ],
new Date(), new Date(),
span.traceChildSync('sort reject domainset (base)', () => sortDomains(dudupedDominArray, domainArrayMainDomainMap, domainArraySubdomainMap)), span.traceChildSync('sort reject domainset (base)', () => sortDomains(dedupedDominArray, domainArrayMainDomainMap, domainArraySubdomainMap)),
'domainset', 'domainset',
output('reject', 'domainset') output('reject', 'domainset')
), ),

View File

@ -188,72 +188,73 @@ export const createRuleset = (
singBoxPath: string, singBoxPath: string,
_clashMrsPath?: string _clashMrsPath?: string
] ]
) => parentSpan.traceChild(`create ruleset: ${path.basename(surgePath, path.extname(surgePath))}`).traceAsyncFn(async (childSpan) => { ) => parentSpan.traceChildAsync(
content = processRuleSet(content); `create ruleset: ${path.basename(surgePath, path.extname(surgePath))}`,
const surgeContent = childSpan.traceChildSync('process surge ruleset', () => { async (childSpan) => {
let _surgeContent; const surgeContent = childSpan.traceChildSync('process surge ruleset', () => {
switch (type) { let _surgeContent;
case 'domainset': switch (type) {
_surgeContent = [MARK, ...content]; case 'domainset':
break; _surgeContent = [MARK, ...content];
case 'ruleset': break;
_surgeContent = [`DOMAIN,${MARK}`, ...content]; case 'ruleset':
break; _surgeContent = [`DOMAIN,${MARK}`, ...processRuleSet(content)];
case 'ipcidr': break;
_surgeContent = [`DOMAIN,${MARK}`, ...content.map(i => `IP-CIDR,${i}`)]; case 'ipcidr':
break; _surgeContent = [`DOMAIN,${MARK}`, ...processRuleSet(content.map(i => `IP-CIDR,${i}`))];
case 'ipcidr6': break;
_surgeContent = [`DOMAIN,${MARK}`, ...content.map(i => `IP-CIDR6,${i}`)]; case 'ipcidr6':
break; _surgeContent = [`DOMAIN,${MARK}`, ...processRuleSet(content.map(i => `IP-CIDR6,${i}`))];
default: break;
throw new TypeError(`Unknown type: ${type}`); default:
} throw new TypeError(`Unknown type: ${type}`);
}
return withBannerArray(title, description, date, _surgeContent); return withBannerArray(title, description, date, _surgeContent);
}); });
const clashContent = childSpan.traceChildSync('convert incoming ruleset to clash', () => { const clashContent = childSpan.traceChildSync('convert incoming ruleset to clash', () => {
let _clashContent; let _clashContent;
switch (type) { switch (type) {
case 'domainset': case 'domainset':
_clashContent = [MARK, ...surgeDomainsetToClashDomainset(content)]; _clashContent = [MARK, ...surgeDomainsetToClashDomainset(content)];
break; break;
case 'ruleset': case 'ruleset':
_clashContent = [`DOMAIN,${MARK}`, ...surgeRulesetToClashClassicalTextRuleset(content)]; _clashContent = [`DOMAIN,${MARK}`, ...surgeRulesetToClashClassicalTextRuleset(processRuleSet(content))];
break; break;
case 'ipcidr': case 'ipcidr':
case 'ipcidr6': case 'ipcidr6':
_clashContent = content; _clashContent = content;
break; break;
default: default:
throw new TypeError(`Unknown type: ${type}`); throw new TypeError(`Unknown type: ${type}`);
} }
return withBannerArray(title, description, date, _clashContent); return withBannerArray(title, description, date, _clashContent);
}); });
const singboxContent = childSpan.traceChildSync('convert incoming ruleset to singbox', () => { const singboxContent = childSpan.traceChildSync('convert incoming ruleset to singbox', () => {
let _singBoxContent; let _singBoxContent;
switch (type) { switch (type) {
case 'domainset': case 'domainset':
_singBoxContent = surgeDomainsetToSingbox([MARK, ...content]); _singBoxContent = surgeDomainsetToSingbox([MARK, ...processRuleSet(content)]);
break; break;
case 'ruleset': case 'ruleset':
_singBoxContent = surgeRulesetToSingbox([`DOMAIN,${MARK}`, ...content]); _singBoxContent = surgeRulesetToSingbox([`DOMAIN,${MARK}`, ...processRuleSet(content)]);
break; break;
case 'ipcidr': case 'ipcidr':
case 'ipcidr6': case 'ipcidr6':
_singBoxContent = ipCidrListToSingbox(content); _singBoxContent = ipCidrListToSingbox(content);
break; break;
default: default:
throw new TypeError(`Unknown type: ${type}`); throw new TypeError(`Unknown type: ${type}`);
} }
return stringify(_singBoxContent).split('\n'); return stringify(_singBoxContent).split('\n');
}); });
await Promise.all([ await Promise.all([
compareAndWriteFile(childSpan, surgeContent, surgePath), compareAndWriteFile(childSpan, surgeContent, surgePath),
compareAndWriteFile(childSpan, clashContent, clashPath), compareAndWriteFile(childSpan, clashContent, clashPath),
compareAndWriteFile(childSpan, singboxContent, singBoxPath) compareAndWriteFile(childSpan, singboxContent, singBoxPath)
]); ]);
// if (clashMrsPath) { // if (clashMrsPath) {
// if (type === 'domainset') { // if (type === 'domainset') {
@ -265,4 +266,5 @@ export const createRuleset = (
// }); // });
// } // }
// } // }
}); }
);