From 4e9e206ec0c89ef220f83bc081a2ef87ae4e1b15 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Tue, 7 Jan 2025 23:17:38 +0800 Subject: [PATCH] Feat: include `my_reject` in adguardhome --- Build/build-reject-domainset.ts | 15 ++++++++++++--- Build/lib/rules/base.ts | 12 +++++++++--- Source/non_ip/my_reject.conf | 12 ------------ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/Build/build-reject-domainset.ts b/Build/build-reject-domainset.ts index e2caddc4..685cd59b 100644 --- a/Build/build-reject-domainset.ts +++ b/Build/build-reject-domainset.ts @@ -6,7 +6,7 @@ import { processHosts, processFilterRules, processDomainLists } from './lib/pars import { HOSTS, ADGUARD_FILTERS, PREDEFINED_WHITELIST, DOMAIN_LISTS, HOSTS_EXTRA, DOMAIN_LISTS_EXTRA, ADGUARD_FILTERS_EXTRA, PHISHING_DOMAIN_LISTS_EXTRA, ADGUARD_FILTERS_WHITELIST } from './constants/reject-data-source'; import { compareAndWriteFile } from './lib/create-file'; -import { readFileByLine, readFileIntoProcessedArray } from './lib/fetch-text-by-line'; +import { readFileIntoProcessedArray } from './lib/fetch-text-by-line'; import { task } from './trace'; // tldts-experimental is way faster than tldts, but very little bit inaccurate // (since it is hashes based). But the result is still deterministic, which is @@ -21,7 +21,8 @@ import { DomainsetOutput } from './lib/create-file'; const readLocalRejectDomainsetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/reject_sukka.conf')); const readLocalRejectExtraDomainsetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/reject_sukka_extra.conf')); -const readLocalRejectRulesetPromise = readFileByLine(path.join(SOURCE_DIR, 'non_ip/reject.conf')); +const readLocalRejectRulesetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/reject.conf')); +const readLocalMyRejectRulesetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/my_reject.conf')); export const buildRejectDomainSet = task(require.main === module, __filename)(async (span) => { const rejectBaseDescription = [ @@ -171,7 +172,15 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as '! Description: The domainset supports AD blocking, tracking protection, privacy protection, anti-phishing, anti-mining', '!' ], - rejectOutput.adguardhome() + appendArrayInPlace( + rejectOutput.adguardhome(), + ( + await new DomainsetOutput(span, 'my_reject') + .addFromRuleset(readLocalMyRejectRulesetPromise) + .addFromRuleset(readLocalRejectRulesetPromise) + .done() + ).adguardhome() + ) ), path.join(OUTPUT_INTERNAL_DIR, 'reject-adguardhome.txt') ) diff --git a/Build/lib/rules/base.ts b/Build/lib/rules/base.ts index 49155a99..b6e36b0e 100644 --- a/Build/lib/rules/base.ts +++ b/Build/lib/rules/base.ts @@ -36,7 +36,7 @@ export abstract class RuleOutput { protected otherRules: string[] = []; protected abstract type: 'domainset' | 'non_ip' | 'ip'; - private pendingPromise: Promise | null = null; + private pendingPromise: Promise | null = null; static readonly jsonToLines = (json: unknown): string[] => stringify(json).split('\n'); @@ -201,8 +201,13 @@ export abstract class RuleOutput { } } - addFromRuleset(source: AsyncIterable | Iterable) { - this.pendingPromise = (this.pendingPromise ||= Promise.resolve()).then(() => this.addFromRulesetPromise(source)); + addFromRuleset(source: AsyncIterable | Iterable | Promise>) { + if (this.pendingPromise) { + this.pendingPromise = this.pendingPromise.then(() => source); + } else { + this.pendingPromise = Promise.resolve(source); + } + this.pendingPromise = this.pendingPromise.then((source) => this.addFromRulesetPromise(source)); return this; } @@ -247,6 +252,7 @@ export abstract class RuleOutput { async done() { await this.pendingPromise; this.pendingPromise = null; + return this; } private guardPendingPromise() { diff --git a/Source/non_ip/my_reject.conf b/Source/non_ip/my_reject.conf index 3746ff74..c6d01a7e 100644 --- a/Source/non_ip/my_reject.conf +++ b/Source/non_ip/my_reject.conf @@ -38,18 +38,6 @@ DOMAIN-SUFFIX,uhabo.com DOMAIN-SUFFIX,xycdn.com # >> Misc -DOMAIN-SUFFIX,parallels.com -DOMAIN-SUFFIX,www.parallelskorea.com -DOMAIN-SUFFIX,parallels.cn -DOMAIN-SUFFIX,parallels.de -DOMAIN-SUFFIX,parallels.es -DOMAIN-SUFFIX,parallels.fr -DOMAIN-SUFFIX,parallels.nl -DOMAIN-SUFFIX,parallels.pt -DOMAIN-SUFFIX,parallels.ru -DOMAIN-SUFFIX,parallelskorea.com -DOMAIN-SUFFIX,myparallels.com -DOMAIN-SUFFIX,my.parallels.com DOMAIN-KEYWORD,bahoom DOMAIN,daisydiskapp.com