瀏覽代碼

Fix: sort AdGuardHome domains for stablity

SukkaW 1 年之前
父節點
當前提交
fbaa2654ce
共有 1 個文件被更改,包括 10 次插入4 次删除
  1. 10 4
      Build/lib/rules/domainset.ts

+ 10 - 4
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<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];