Fix: sort AdGuardHome domains for stablity

This commit is contained in:
SukkaW 2024-10-18 17:14:58 +08:00
parent f7e5ff1de5
commit fbaa2654ce

View File

@ -1,9 +1,8 @@
import { invariant } from 'foxact/invariant';
import createKeywordFilter from '../aho-corasick';
import { buildParseDomainMap } from '../stable-sort-domain';
import { buildParseDomainMap, sortDomains } from '../stable-sort-domain';
import { RuleOutput } from './base';
import type { SingboxSourceFormat } from '../singbox';
import { appendArrayFromSet } from '../misc';
type Preprocessed = string[];
@ -96,8 +95,15 @@ export class DomainsetOutput extends RuleOutput<Preprocessed> {
adguardhome(whitelist: Set<string | `.${string}`>): string[] {
const results: string[] = [];
// whitelist
appendArrayFromSet(results, whitelist, i => (i[0] === '.' ? '@@||' + i.slice(1) + '^' : '@@|' + i + '^'));
const whitelistArray = sortDomains(Array.from(whitelist));
for (let i = 0, len = whitelistArray.length; i < len; i++) {
const domain = whitelistArray[i];
if (domain[0] === '.') {
results.push(`@@||${domain.slice(1)}^`);
} else {
results.push(`@@|${domain}^`);
}
}
for (let i = 0, len = this.$preprocessed.length; i < len; i++) {
const domain = this.$preprocessed[i];