From fbaa2654cecd9dd0f6268fb3022bbf4422b8a41b Mon Sep 17 00:00:00 2001 From: SukkaW Date: Fri, 18 Oct 2024 17:14:58 +0800 Subject: [PATCH] Fix: sort AdGuardHome domains for stablity --- Build/lib/rules/domainset.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Build/lib/rules/domainset.ts b/Build/lib/rules/domainset.ts index 872575e7..c4acb338 100644 --- a/Build/lib/rules/domainset.ts +++ b/Build/lib/rules/domainset.ts @@ -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 { adguardhome(whitelist: Set): 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];