refactor: test url with URL.canParse()

supported by Nodejs >=19.9
This commit is contained in:
Ming Di Leom 2025-03-22 01:53:32 +00:00
parent 6815b90e14
commit 9d1c90066d
No known key found for this signature in database
GPG Key ID: 32D3E28E96A695E8
2 changed files with 25 additions and 21 deletions

View File

@ -8,7 +8,7 @@
"unzipper": "^0.12.3"
},
"engines": {
"node": ">= 18.12.0"
"node": ">= 20.9.0"
},
"type": "module"
}

View File

@ -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'))