Browse Source

Chore: trie dump meta supports callback

SukkaW 1 year ago
parent
commit
80ab4e69c1
3 changed files with 12 additions and 11 deletions
  1. 3 4
      Build/lib/rules/base.ts
  2. 1 3
      Build/lib/rules/domainset.ts
  3. 8 4
      Build/lib/trie.ts

+ 3 - 4
Build/lib/rules/base.ts

@@ -12,7 +12,7 @@ import { readFileByLine } from '../fetch-text-by-line';
 import { asyncWriteToStream } from '../async-write-to-stream';
 
 export abstract class RuleOutput<TPreprocessed = unknown> {
-  protected domainTrie = createTrie<unknown>(null, true);
+  protected domainTrie = createTrie<string>(null, true);
   protected domainKeywords = new Set<string>();
   protected domainWildcard = new Set<string>();
   protected userAgent = new Set<string>();
@@ -97,7 +97,7 @@ export abstract class RuleOutput<TPreprocessed = unknown> {
   }
 
   addDomain(domain: string) {
-    this.domainTrie.add(domain);
+    this.domainTrie.add(domain, domain);
     return this;
   }
 
@@ -109,8 +109,7 @@ export abstract class RuleOutput<TPreprocessed = unknown> {
   }
 
   addDomainSuffix(domain: string) {
-    this.domainTrie.add(domain[0] === '.' ? domain : '.' + domain);
-    return this;
+    return this.addDomain(domain[0] === '.' ? domain : '.' + domain);
   }
 
   bulkAddDomainSuffix(domains: string[]) {

+ 1 - 3
Build/lib/rules/domainset.ts

@@ -80,9 +80,7 @@ export class DomainsetOutput extends RuleOutput<Preprocessed> {
       )
       .entries())
       .filter(a => a[1] > 9)
-      .sort(
-        (a, b) => (b[1] - a[1]) || a[0].localeCompare(b[0])
-      )
+      .sort((a, b) => (b[1] - a[1]) || a[0].localeCompare(b[0]))
       .map(([domain, count]) => `${domain}${' '.repeat(100 - domain.length)}${count}`);
   }
 

+ 8 - 4
Build/lib/trie.ts

@@ -316,12 +316,16 @@ abstract class Triebase<Meta = any> {
     return results;
   };
 
-  public dumpMeta() {
+  public dumpMeta(onMeta: (meta: Meta) => void): void;
+  public dumpMeta(): Meta[];
+  public dumpMeta(onMeta?: (meta: Meta) => void): Meta[] | void {
     const results: Meta[] = [];
 
-    this.walk((_suffix, meta) => {
-      results.push(meta);
-    });
+    const handleMeta = onMeta
+      ? (_suffix: string[], meta: Meta) => onMeta(meta)
+      : (_suffix: string[], meta: Meta) => results.push(meta);
+
+    this.walk(handleMeta);
 
     return results;
   };