From fa0cb48bf00a4fd854840ca0019371b9318c86c4 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Thu, 2 May 2024 18:52:25 +0800 Subject: [PATCH] Chore: re-use code --- Build/build-microsoft-cdn.ts | 5 +++-- Build/lib/parse-dnsmasq.ts | 15 ++++++++++----- Build/validate-domestic.ts | 6 ++++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Build/build-microsoft-cdn.ts b/Build/build-microsoft-cdn.ts index 033aeb83..2ce1b0c1 100644 --- a/Build/build-microsoft-cdn.ts +++ b/Build/build-microsoft-cdn.ts @@ -5,6 +5,7 @@ import { fetchRemoteTextByLine } from './lib/fetch-text-by-line'; import { createTrie } from './lib/trie'; import { SHARED_DESCRIPTION } from './lib/constants'; import { createMemoizedPromise } from './lib/memo-promise'; +import { extractDomainsFromFelixDnsmasq } from './lib/parse-dnsmasq'; const PROBE_DOMAINS = ['.microsoft.com', '.windows.net', '.windows.com', '.windowsupdate.com', '.windowssearch.com', '.office.net']; @@ -26,8 +27,8 @@ export const getMicrosoftCdnRulesetPromise = createMemoizedPromise(async () => { // First trie is to find the microsoft domains that matches probe domains const trie = createTrie(); for await (const line of await fetchRemoteTextByLine('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf')) { - if (line.startsWith('server=/') && line.endsWith('/114.114.114.114')) { - const domain = line.slice(8, -16); + const domain = extractDomainsFromFelixDnsmasq(line); + if (domain) { trie.add(domain); } } diff --git a/Build/lib/parse-dnsmasq.ts b/Build/lib/parse-dnsmasq.ts index 66e183f6..fa09bbab 100644 --- a/Build/lib/parse-dnsmasq.ts +++ b/Build/lib/parse-dnsmasq.ts @@ -6,14 +6,19 @@ const isDomainLoose = (domain: string): boolean => { return !!(!isIp && (isIcann || isPrivate)); }; +export const extractDomainsFromFelixDnsmasq = (line: string): string | null => { + if (line.startsWith('server=/') && line.endsWith('/114.114.114.114')) { + return line.slice(8, -16); + } + return null; +}; + export const parseFelixDnsmasq = async (url: string | URL): Promise => { const res: string[] = []; for await (const line of await fetchRemoteTextByLine(url)) { - if (line.startsWith('server=/') && line.endsWith('/114.114.114.114')) { - const domain = line.slice(8, -16); - if (isDomainLoose(domain)) { - res.push(domain); - } + const domain = extractDomainsFromFelixDnsmasq(line); + if (domain && isDomainLoose(domain)) { + res.push(domain); } } diff --git a/Build/validate-domestic.ts b/Build/validate-domestic.ts index 290f561c..44cb4c41 100644 --- a/Build/validate-domestic.ts +++ b/Build/validate-domestic.ts @@ -3,12 +3,14 @@ import { parse } from 'csv-parse/sync'; import { createTrie } from './lib/trie'; import path from 'path'; import { processLine } from './lib/process-line'; +import { extract } from 'tar-stream'; +import { extractDomainsFromFelixDnsmasq } from './lib/parse-dnsmasq'; export const parseDomesticList = async () => { const set = new Set(); for await (const line of await fetchRemoteTextByLine('https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf')) { - if (line.startsWith('server=/') && line.endsWith('/114.114.114.114')) { - const domain = line.slice(8, -16); + const domain = extractDomainsFromFelixDnsmasq(line); + if (domain) { set.add(domain); } }