From 0a827223359dc4fe486f420978623ec86ae21025 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Sun, 30 Jun 2024 09:48:18 +0200 Subject: [PATCH] chore(x): better resolvedUrls encapsulation --- packages/metascraper-x/README.md | 2 +- packages/metascraper-x/src/index.js | 13 +------------ packages/metascraper-x/test/index.js | 3 ++- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/packages/metascraper-x/README.md b/packages/metascraper-x/README.md index eac91315e..baf2da41c 100644 --- a/packages/metascraper-x/README.md +++ b/packages/metascraper-x/README.md @@ -36,7 +36,7 @@ Set to `true` if you want to resolve `t.co` URLs into the final URL. Type: `function` -A decorator to be called after `t.co` is resolved. It doesn't do anything by default. +The function implementation that resolves `t.co` into a the final URL. ## License diff --git a/packages/metascraper-x/src/index.js b/packages/metascraper-x/src/index.js index 16bdc8dff..22365c9cd 100644 --- a/packages/metascraper-x/src/index.js +++ b/packages/metascraper-x/src/index.js @@ -1,6 +1,5 @@ 'use strict' -const reachableUrl = require('reachable-url') const { getUrls, author, @@ -45,18 +44,8 @@ module.exports = ({ toDescription(async $ => { let description = $('meta[property="og:description"]').attr('content') if (!resolveUrls) return description - const urls = getUrls(description) - - const resolvedUrls = await Promise.all( - urls.map(async url => { - const response = await reachableUrl(url, gotOpts) - if (reachableUrl.isReachable(response)) { - return resolveUrl(response.url) - } - return url - }) - ) + const resolvedUrls = await Promise.all(urls.map(resolveUrl)) for (const [index, url] of resolvedUrls.entries()) { const original = urls[index] diff --git a/packages/metascraper-x/test/index.js b/packages/metascraper-x/test/index.js index 04b363e75..94d31ab8a 100644 --- a/packages/metascraper-x/test/index.js +++ b/packages/metascraper-x/test/index.js @@ -32,7 +32,8 @@ test('from a X profile resolving URLs', async t => { const url = 'https://x.com/Kikobeats' const html = await readFile(resolve(__dirname, 'fixtures/profile.html')) - const resolveUrl = url => { + const resolveUrl = async shortUrl => { + const { url } = await fetch(shortUrl, { method: 'HEAD' }) const urlObj = new URL(url) urlObj.search = '' return urlObj.toString().replace('https://', '').replace('/', '')