浏览代码

Refactor: adjust domainset

SukkaW 1 年之前
父节点
当前提交
6e9d2181eb
共有 2 个文件被更改,包括 17 次插入30 次删除
  1. 0 8
      Build/build-reject-domainset.ts
  2. 17 22
      Build/lib/rules/domainset.ts

+ 0 - 8
Build/build-reject-domainset.ts

@@ -137,14 +137,6 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
     }
   });
 
-  span.traceChildSync(
-    'build domain map for sort & collect stat',
-    () => {
-      rejectOutput.calcDomainMap();
-      rejectExtraOutput.calcDomainMap();
-    }
-  );
-
   // Create reject stats
   const rejectDomainsStats: string[] = span
     .traceChild('create reject stats')

+ 17 - 22
Build/lib/rules/domainset.ts

@@ -3,7 +3,6 @@ import createKeywordFilter from '../aho-corasick';
 import { buildParseDomainMap, sortDomains } from '../stable-sort-domain';
 import { RuleOutput } from './base';
 import type { SingboxSourceFormat } from '../singbox';
-import { nullthrow } from 'foxact/nullthrow';
 
 type Preprocessed = string[];
 
@@ -15,27 +14,22 @@ export class DomainsetOutput extends RuleOutput<Preprocessed> {
 
     const results: string[] = [];
 
-    const dumped = this.domainTrie.dump();
-
-    for (let i = 0, len = dumped.length; i < len; i++) {
-      const domain = dumped[i];
-      if (!kwfilter(domain)) {
-        results.push(domain);
+    this.domainTrie.dump((domain) => {
+      if (kwfilter(domain)) {
+        return;
       }
-    }
+      results.push(domain);
+    });
 
-    const sorted = sortDomains(results, this.apexDomainMap, this.subDomainMap);
-    sorted.push('this_ruleset_is_made_by_sukkaw.ruleset.skk.moe');
-
-    return sorted;
-  }
-
-  calcDomainMap() {
     if (!this.apexDomainMap || !this.subDomainMap) {
-      const { domainMap, subdomainMap } = buildParseDomainMap(this.$preprocessed);
+      const { domainMap, subdomainMap } = buildParseDomainMap(results);
       this.apexDomainMap = domainMap;
       this.subDomainMap = subdomainMap;
     }
+    const sorted = sortDomains(results, this.apexDomainMap, this.subDomainMap);
+    sorted.push('this_ruleset_is_made_by_sukkaw.ruleset.skk.moe');
+
+    return sorted;
   }
 
   surge(): string[] {
@@ -72,17 +66,18 @@ export class DomainsetOutput extends RuleOutput<Preprocessed> {
     invariant(this.$preprocessed, 'Non dumped yet');
     invariant(this.apexDomainMap, 'Missing apex domain map');
 
-    return Array.from(
-      nullthrow(this.$preprocessed, 'Non dumped yet')
-        .reduce<Map<string, number>>((acc, cur) => {
+    return Array.from(this.$preprocessed
+      .reduce<Map<string, number>>(
+        (acc, cur) => {
           const suffix = this.apexDomainMap!.get(cur);
           if (suffix) {
             acc.set(suffix, (acc.get(suffix) ?? 0) + 1);
           }
           return acc;
-        }, new Map())
-        .entries()
-    )
+        },
+        new Map()
+      )
+      .entries())
       .filter(a => a[1] > 9)
       .sort(
         (a, b) => (b[1] - a[1]) || a[0].localeCompare(b[0])