Skip to content

Commit 9da1325

Browse files
committed
Refactor url helpers
1 parent 13a5498 commit 9da1325

File tree

7 files changed

+32
-31
lines changed

7 files changed

+32
-31
lines changed

packages/metascraper-author/index.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ const removeBy = value => value.replace(REGEX_BY, '')
1717

1818
const wrap = rule => ({ htmlDom }) => {
1919
const value = rule(htmlDom)
20-
21-
if (!isString(value)) return
22-
if (isUrl(value)) return
23-
return titleize(removeBy(value))
20+
return isString(value) && !isUrl(value, {relative: false}) && titleize(removeBy(value))
2421
}
2522

2623
/**

packages/metascraper-helpers/index.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,27 @@ const isRelativeUrl = require('is-relative-url')
55
const { resolve: resolveUrl } = require('url')
66
const sanetizeUrl = require('normalize-url')
77
const smartquotes = require('smartquotes')
8+
const { flow, isNil } = require('lodash')
89
const toTitle = require('to-title-case')
910
const urlRegex = require('url-regex')
10-
const { flow } = require('lodash')
1111

12-
const isUrl = value => urlRegex().test(value)
12+
const isUrl = (url, {relative = true} = {}) => {
13+
if (isNil(url)) return false
14+
if (!relative) return urlRegex().test(url)
15+
return isRelativeUrl(url) || urlRegex().test(url)
16+
}
1317

1418
const normalizeUrl = url => sanetizeUrl(url, { stripWWW: false })
1519

16-
const getAbsoluteUrl = (url, baseUrl) =>
17-
isRelativeUrl(url) ? resolveUrl(baseUrl, url) : url
20+
const getAbsoluteUrl = (baseUrl, relativePath = '') => (
21+
isRelativeUrl(relativePath)
22+
? resolveUrl(baseUrl, relativePath)
23+
: relativePath
24+
)
1825

19-
const getUrl = (url, baseUrl) => normalizeUrl(getAbsoluteUrl(url, baseUrl))
26+
const getUrl = (baseUrl, relativePath) => (
27+
normalizeUrl(getAbsoluteUrl(baseUrl, relativePath))
28+
)
2029

2130
const createTitle = flow([condenseWhitespace, smartquotes])
2231

packages/metascraper-image/index.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict'
22

3-
const { getUrl } = require('@metascraper/helpers')
3+
const { getUrl, isUrl } = require('@metascraper/helpers')
44

55
/**
66
* Wrap a rule with validation and formatting logic.
@@ -9,10 +9,9 @@ const { getUrl } = require('@metascraper/helpers')
99
* @return {Function} wrapped
1010
*/
1111

12-
const wrap = rule => ({ htmlDom, url: baseUrl }) => {
13-
const url = rule(htmlDom)
14-
if (!url) return
15-
return getUrl(url, baseUrl)
12+
const wrap = rule => ({ htmlDom, url }) => {
13+
const value = rule(htmlDom)
14+
return isUrl(value) && getUrl(url, value)
1615
}
1716

1817
/**
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict'
22

3+
const { getUrl } = require('@metascraper/helpers')
4+
35
module.exports = () => ({
4-
logo: [({ htmlDom: $, meta, url }) => `${url}/favicon.ico`]
6+
logo: [({ htmlDom: $, meta, url }) => getUrl(url, `favicon.ico`)]
57
})

packages/metascraper-logo-favicon/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
"clearbit",
2121
"metascraper"
2222
],
23+
"dependencies": {
24+
"@metascraper/helpers": "~3.2.0"
25+
},
2326
"devDependencies": {
2427
"standard": "latest"
2528
},

packages/metascraper-logo/index.js

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
'use strict'
22

3-
const {
4-
flow,
5-
chain,
6-
first,
7-
isString,
8-
concat,
9-
toNumber,
10-
split
11-
} = require('lodash')
12-
const { getUrl } = require('@metascraper/helpers')
3+
const { flow, chain, first, concat, toNumber, split } = require('lodash')
4+
const { getUrl, isUrl } = require('@metascraper/helpers')
135

146
const getSize = flow([str => split(str, 'x'), first, toNumber])
157

@@ -46,10 +38,9 @@ const sizeSelectors = [
4638
* @return {Function} wrapped
4739
*/
4840

49-
const wrap = rule => ({ htmlDom, url: baseUrl }) => {
50-
const url = rule(htmlDom)
51-
if (!isString(url)) return
52-
return getUrl(url, baseUrl)
41+
const wrap = rule => ({ htmlDom, url }) => {
42+
const value = rule(htmlDom)
43+
return isUrl(value) && getUrl(url, value)
5344
}
5445

5546
/**

packages/metascraper-url/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

3-
const { isString } = require('lodash')
43
const { getUrl, isUrl } = require('@metascraper/helpers')
4+
const { isString } = require('lodash')
55

66
/**
77
* Wrap a rule with validation and formatting logic.
@@ -12,7 +12,7 @@ const { getUrl, isUrl } = require('@metascraper/helpers')
1212

1313
const wrap = rule => ({ htmlDom, url }) => {
1414
const value = rule(htmlDom, url)
15-
return isUrl(value) ? getUrl(value) : url
15+
return isUrl(value) ? getUrl(value, url) : url
1616
}
1717

1818
/**

0 commit comments

Comments
 (0)