From 9d1c90066dcd22897c9ab21546bc1ab74308ec06 Mon Sep 17 00:00:00 2001 From: Ming Di Leom <2809763-curben@users.noreply.gitlab.com> Date: Sat, 22 Mar 2025 01:53:32 +0000 Subject: [PATCH] refactor: test url with URL.canParse() supported by Nodejs >=19.9 --- package.json | 2 +- src/script.js | 44 ++++++++++++++++++++++++-------------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index eba1852..a51b298 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "unzipper": "^0.12.3" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "type": "module" } diff --git a/src/script.js b/src/script.js index 3596917..e3c052f 100644 --- a/src/script.js +++ b/src/script.js @@ -7,29 +7,33 @@ import { fileURLToPath } from 'node:url' const __dirname = dirname(fileURLToPath(import.meta.url)) const { parse } = JSON -const f = async () => { - // __dirname is src/ - const outputFile = join(__dirname, '../tmp/domains-raw.txt') - await rm(outputFile, { force: true }) - const domainsPath = join(__dirname, '../tmp/blacklistdomains.json') +// __dirname is src/ +const outputFile = join(__dirname, '../tmp/domains-raw.txt') +await rm(outputFile, { force: true }) +const domainsPath = join(__dirname, '../tmp/blacklistdomains.json') - const domainsStr = await readFile(domainsPath) - const domainsArray = parse(domainsStr) +const domainsStr = await readFile(domainsPath) +const domainsArray = parse(domainsStr) - const domains = new Set() +const domains = new Set() - for (const { url } of domainsArray) { - let parsedUrl = new URL('http://example.com') - try { - parsedUrl = new URL(url.replace(/\*\./g, '')) - } catch { - continue - } - const domain = parsedUrl.hostname.replace(/\\/g, '').replace(/^www\./, '') - domains.add(domain) +for (const { url } of domainsArray) { + let domain = '' + if (URL.canParse(url)) { + const urlObj = new URL(url) + + domain = urlObj.hostname + } else { + const urlArray = url.split('/') + if (urlArray.length >= 3) domain = urlArray[2] + } + if (domain.length >= 1) { + domains.add(domain + .replace(/^\*\./, '') + .replace(/\\/g, '') + .replace(/^www\./, '') + ) } - - await writeFile(outputFile, Array.from(domains).join('\n')) } -f() +await writeFile(outputFile, Array.from(domains).join('\n'))