From eb3c0c86d87569d1d9c38e43a3df939b5e13ed30 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sun, 7 Jul 2024 17:03:02 +0800 Subject: [PATCH] Fix(#32): validate existing hostnames --- Build/build-speedtest-domainset.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Build/build-speedtest-domainset.ts b/Build/build-speedtest-domainset.ts index c82714e9..beb595d7 100644 --- a/Build/build-speedtest-domainset.ts +++ b/Build/build-speedtest-domainset.ts @@ -11,7 +11,6 @@ import { SHARED_DESCRIPTION } from './lib/constants'; import picocolors from 'picocolors'; import { readFileIntoProcessedArray } from './lib/fetch-text-by-line'; import { TTL, deserializeArray, fsFetchCache, serializeArray } from './lib/cache-filesystem'; -import { createMemoizedPromise } from './lib/memo-promise'; import { createTrie } from './lib/trie'; @@ -62,7 +61,7 @@ const querySpeedtestApi = async (keyword: string): Promise> } })).then(r => r.json() as any).then((data: Array<{ url: string }>) => data.reduce( (prev, cur) => { - const hn = getHostname(cur.url, { detectIp: false }); + const hn = getHostname(cur.url, { detectIp: false, validateHostname: true }); if (hn) { prev.push(hn); } @@ -81,14 +80,6 @@ const querySpeedtestApi = async (keyword: string): Promise> } }; -const getPreviousSpeedtestDomainsPromise = createMemoizedPromise(async () => { - try { - return await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../List/domainset/speedtest.conf')); - } catch { - return []; - } -}); - export const buildSpeedtestDomainSet = task(import.meta.main, import.meta.path)(async (span) => { const domainTrie = createTrie( [ @@ -185,8 +176,18 @@ export const buildSpeedtestDomainSet = task(import.meta.main, import.meta.path)( await span.traceChildAsync( 'fetch previous speedtest domainset', - () => getPreviousSpeedtestDomainsPromise() - .then(prevDomains => prevDomains.forEach(domainTrie.add)) + async () => { + try { + const contents = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../List/domainset/speedtest.conf')); + contents.reduce((acc, line) => { + const hn = getHostname(line, { detectIp: false, validateHostname: true }); + if (hn) { + acc.push(hn); + } + return acc; + }, []).forEach(domainTrie.add); + } catch { } + } ); await new Promise((resolve, reject) => {