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,8 +188,9 @@ 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))}`,
async (childSpan) => {
const surgeContent = childSpan.traceChildSync('process surge ruleset', () => { const surgeContent = childSpan.traceChildSync('process surge ruleset', () => {
let _surgeContent; let _surgeContent;
switch (type) { switch (type) {
@ -197,13 +198,13 @@ export const createRuleset = (
_surgeContent = [MARK, ...content]; _surgeContent = [MARK, ...content];
break; break;
case 'ruleset': case 'ruleset':
_surgeContent = [`DOMAIN,${MARK}`, ...content]; _surgeContent = [`DOMAIN,${MARK}`, ...processRuleSet(content)];
break; break;
case 'ipcidr': case 'ipcidr':
_surgeContent = [`DOMAIN,${MARK}`, ...content.map(i => `IP-CIDR,${i}`)]; _surgeContent = [`DOMAIN,${MARK}`, ...processRuleSet(content.map(i => `IP-CIDR,${i}`))];
break; break;
case 'ipcidr6': case 'ipcidr6':
_surgeContent = [`DOMAIN,${MARK}`, ...content.map(i => `IP-CIDR6,${i}`)]; _surgeContent = [`DOMAIN,${MARK}`, ...processRuleSet(content.map(i => `IP-CIDR6,${i}`))];
break; break;
default: default:
throw new TypeError(`Unknown type: ${type}`); throw new TypeError(`Unknown type: ${type}`);
@ -219,7 +220,7 @@ export const createRuleset = (
_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':
@ -234,10 +235,10 @@ export const createRuleset = (
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':
@ -265,4 +266,5 @@ export const createRuleset = (
// }); // });
// } // }
// } // }
}); }
);