From 80ab4e69c17dd42b5a667e16c791871d0bbb7d87 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sat, 12 Oct 2024 13:24:27 +0800 Subject: [PATCH] Chore: trie dump meta supports callback --- Build/lib/rules/base.ts | 7 +++---- Build/lib/rules/domainset.ts | 4 +--- Build/lib/trie.ts | 12 ++++++++---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Build/lib/rules/base.ts b/Build/lib/rules/base.ts index ab51c3b1..d2d8a046 100644 --- a/Build/lib/rules/base.ts +++ b/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 { - protected domainTrie = createTrie(null, true); + protected domainTrie = createTrie(null, true); protected domainKeywords = new Set(); protected domainWildcard = new Set(); protected userAgent = new Set(); @@ -97,7 +97,7 @@ export abstract class RuleOutput { } addDomain(domain: string) { - this.domainTrie.add(domain); + this.domainTrie.add(domain, domain); return this; } @@ -109,8 +109,7 @@ export abstract class RuleOutput { } addDomainSuffix(domain: string) { - this.domainTrie.add(domain[0] === '.' ? domain : '.' + domain); - return this; + return this.addDomain(domain[0] === '.' ? domain : '.' + domain); } bulkAddDomainSuffix(domains: string[]) { diff --git a/Build/lib/rules/domainset.ts b/Build/lib/rules/domainset.ts index cc151d22..4265ccff 100644 --- a/Build/lib/rules/domainset.ts +++ b/Build/lib/rules/domainset.ts @@ -80,9 +80,7 @@ export class DomainsetOutput extends RuleOutput { ) .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}`); } diff --git a/Build/lib/trie.ts b/Build/lib/trie.ts index 5737f63d..64145b7f 100644 --- a/Build/lib/trie.ts +++ b/Build/lib/trie.ts @@ -316,12 +316,16 @@ abstract class Triebase { 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; };