From 9da132505bf034e0f965a500fc51a1a4beddf79d Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Wed, 20 Dec 2017 14:20:31 +0100 Subject: [PATCH] Refactor url helpers --- packages/metascraper-author/index.js | 5 +---- packages/metascraper-helpers/index.js | 19 ++++++++++++++----- packages/metascraper-image/index.js | 9 ++++----- packages/metascraper-logo-favicon/index.js | 4 +++- .../metascraper-logo-favicon/package.json | 3 +++ packages/metascraper-logo/index.js | 19 +++++-------------- packages/metascraper-url/index.js | 4 ++-- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/packages/metascraper-author/index.js b/packages/metascraper-author/index.js index ea53705f8..89af64e8c 100644 --- a/packages/metascraper-author/index.js +++ b/packages/metascraper-author/index.js @@ -17,10 +17,7 @@ const removeBy = value => value.replace(REGEX_BY, '') const wrap = rule => ({ htmlDom }) => { const value = rule(htmlDom) - - if (!isString(value)) return - if (isUrl(value)) return - return titleize(removeBy(value)) + return isString(value) && !isUrl(value, {relative: false}) && titleize(removeBy(value)) } /** diff --git a/packages/metascraper-helpers/index.js b/packages/metascraper-helpers/index.js index d5e0d9299..b52d04983 100644 --- a/packages/metascraper-helpers/index.js +++ b/packages/metascraper-helpers/index.js @@ -5,18 +5,27 @@ const isRelativeUrl = require('is-relative-url') const { resolve: resolveUrl } = require('url') const sanetizeUrl = require('normalize-url') const smartquotes = require('smartquotes') +const { flow, isNil } = require('lodash') const toTitle = require('to-title-case') const urlRegex = require('url-regex') -const { flow } = require('lodash') -const isUrl = value => urlRegex().test(value) +const isUrl = (url, {relative = true} = {}) => { + if (isNil(url)) return false + if (!relative) return urlRegex().test(url) + return isRelativeUrl(url) || urlRegex().test(url) +} const normalizeUrl = url => sanetizeUrl(url, { stripWWW: false }) -const getAbsoluteUrl = (url, baseUrl) => - isRelativeUrl(url) ? resolveUrl(baseUrl, url) : url +const getAbsoluteUrl = (baseUrl, relativePath = '') => ( + isRelativeUrl(relativePath) + ? resolveUrl(baseUrl, relativePath) + : relativePath +) -const getUrl = (url, baseUrl) => normalizeUrl(getAbsoluteUrl(url, baseUrl)) +const getUrl = (baseUrl, relativePath) => ( + normalizeUrl(getAbsoluteUrl(baseUrl, relativePath)) +) const createTitle = flow([condenseWhitespace, smartquotes]) diff --git a/packages/metascraper-image/index.js b/packages/metascraper-image/index.js index 9be930b9d..16b7f5224 100644 --- a/packages/metascraper-image/index.js +++ b/packages/metascraper-image/index.js @@ -1,6 +1,6 @@ 'use strict' -const { getUrl } = require('@metascraper/helpers') +const { getUrl, isUrl } = require('@metascraper/helpers') /** * Wrap a rule with validation and formatting logic. @@ -9,10 +9,9 @@ const { getUrl } = require('@metascraper/helpers') * @return {Function} wrapped */ -const wrap = rule => ({ htmlDom, url: baseUrl }) => { - const url = rule(htmlDom) - if (!url) return - return getUrl(url, baseUrl) +const wrap = rule => ({ htmlDom, url }) => { + const value = rule(htmlDom) + return isUrl(value) && getUrl(url, value) } /** diff --git a/packages/metascraper-logo-favicon/index.js b/packages/metascraper-logo-favicon/index.js index 539902270..0ecab039f 100644 --- a/packages/metascraper-logo-favicon/index.js +++ b/packages/metascraper-logo-favicon/index.js @@ -1,5 +1,7 @@ 'use strict' +const { getUrl } = require('@metascraper/helpers') + module.exports = () => ({ - logo: [({ htmlDom: $, meta, url }) => `${url}/favicon.ico`] + logo: [({ htmlDom: $, meta, url }) => getUrl(url, `favicon.ico`)] }) diff --git a/packages/metascraper-logo-favicon/package.json b/packages/metascraper-logo-favicon/package.json index 806137ced..f973d4144 100644 --- a/packages/metascraper-logo-favicon/package.json +++ b/packages/metascraper-logo-favicon/package.json @@ -20,6 +20,9 @@ "clearbit", "metascraper" ], + "dependencies": { + "@metascraper/helpers": "~3.2.0" + }, "devDependencies": { "standard": "latest" }, diff --git a/packages/metascraper-logo/index.js b/packages/metascraper-logo/index.js index 003490891..6ada396ec 100644 --- a/packages/metascraper-logo/index.js +++ b/packages/metascraper-logo/index.js @@ -1,15 +1,7 @@ 'use strict' -const { - flow, - chain, - first, - isString, - concat, - toNumber, - split -} = require('lodash') -const { getUrl } = require('@metascraper/helpers') +const { flow, chain, first, concat, toNumber, split } = require('lodash') +const { getUrl, isUrl } = require('@metascraper/helpers') const getSize = flow([str => split(str, 'x'), first, toNumber]) @@ -46,10 +38,9 @@ const sizeSelectors = [ * @return {Function} wrapped */ -const wrap = rule => ({ htmlDom, url: baseUrl }) => { - const url = rule(htmlDom) - if (!isString(url)) return - return getUrl(url, baseUrl) +const wrap = rule => ({ htmlDom, url }) => { + const value = rule(htmlDom) + return isUrl(value) && getUrl(url, value) } /** diff --git a/packages/metascraper-url/index.js b/packages/metascraper-url/index.js index 60b1b11bf..7410f639f 100644 --- a/packages/metascraper-url/index.js +++ b/packages/metascraper-url/index.js @@ -1,7 +1,7 @@ 'use strict' -const { isString } = require('lodash') const { getUrl, isUrl } = require('@metascraper/helpers') +const { isString } = require('lodash') /** * Wrap a rule with validation and formatting logic. @@ -12,7 +12,7 @@ const { getUrl, isUrl } = require('@metascraper/helpers') const wrap = rule => ({ htmlDom, url }) => { const value = rule(htmlDom, url) - return isUrl(value) ? getUrl(value) : url + return isUrl(value) ? getUrl(value, url) : url } /**