Skip to content

Commit bce6eb5

Browse files
authored
feat: reduce rules on parallel (#157)
* refactor: less code * feat: reduce rules on parallel BREAKING CHANGE: 'meta' can't be passed as shared resource * build: deprecated lang-detector
1 parent f7c76c1 commit bce6eb5

File tree

10 files changed

+12
-209
lines changed

10 files changed

+12
-209
lines changed

README.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,6 @@ const metascraper = require('metascraper')([
197197
| [`@metascraper/helpers`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-helpers) | [![npm](https://img.shields.io/npm/v/@metascraper/helpers.svg?style=flat-square)](https://www.npmjs.com/package/@metascraper/helpers) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-helpers&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-helpers) |
198198
| [`metascraper-image`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-image) | [![npm](https://img.shields.io/npm/v/metascraper-image.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-image) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-image&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-image) |
199199
| [`metascraper-lang`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-lang) | [![npm](https://img.shields.io/npm/v/metascraper-lang.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-lang) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-lang&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-lang) |
200-
| [`metascraper-lang-detector`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-lang-detector) | [![npm](https://img.shields.io/npm/v/metascraper-lang-detector.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-lang-detector) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-lang-detector&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-lang-detector) |
201200
| [`metascraper-logo`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-logo) | [![npm](https://img.shields.io/npm/v/metascraper-logo.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-logo) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-logo&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-logo) |
202201
| [`metascraper-logo-favicon`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-logo-favicon) | [![npm](https://img.shields.io/npm/v/metascraper-logo-favicon.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-logo-favicon) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-logo-favicon&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-logo-favicon) |
203202
| [`metascraper-media-provider`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-media-provider) | [![npm](https://img.shields.io/npm/v/metascraper-media-provider.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-media-provider) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-media-provider&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-media-provider) |
@@ -209,7 +208,6 @@ const metascraper = require('metascraper')([
209208
| [`metascraper-video`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-video) | [![npm](https://img.shields.io/npm/v/metascraper-video.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-video) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-video&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-video) |
210209
| [`metascraper-youtube`](https://github.com/microlinkhq/metascraper/tree/master/packages/metascraper-youtube) | [![npm](https://img.shields.io/npm/v/metascraper-youtube.svg?style=flat-square)](https://www.npmjs.com/package/metascraper-youtube) | [![Dependency Status](https://david-dm.org/microlinkhq/metascraper.svg?path=packages/metascraper-youtube&style=flat-square)](https://david-dm.org/microlinkhq/metascraper?path=packages/metascraper-youtube) |
211210

212-
213211
### Write your own rules
214212

215213
A rule bundle is the simplest way for extending **metascraper** functionality.
@@ -230,10 +228,9 @@ module.exports = opts => {
230228
// You can setup more than one rules per prop (priority is important!).
231229
// They receive as parameter:
232230
// - `htmlDom`: the cheerio HTML instance.
233-
// - `meta`: The current state of the information detected.
234231
// - `url`: The input URL used for extact the content.
235-
({ htmlDom: $, meta, url: baseUrl }) => wrap($ => $('meta[property="og:logo"]').attr('content')),
236-
({ htmlDom: $, meta, url: baseUrl }) => wrap($ => $('meta[itemprop="logo"]').attr('content'))
232+
({ htmlDom: $, url: baseUrl }) => wrap($ => $('meta[property="og:logo"]').attr('content')),
233+
({ htmlDom: $, url: baseUrl }) => wrap($ => $('meta[itemprop="logo"]').attr('content'))
237234
]
238235
})
239236
}

packages/metascraper-lang-detector/.npmrc

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/metascraper-lang-detector/CHANGELOG.md

Lines changed: 0 additions & 51 deletions
This file was deleted.

packages/metascraper-lang-detector/README.md

Lines changed: 0 additions & 19 deletions
This file was deleted.

packages/metascraper-lang-detector/index.js

Lines changed: 0 additions & 36 deletions
This file was deleted.

packages/metascraper-lang-detector/package.json

Lines changed: 0 additions & 47 deletions
This file was deleted.

packages/metascraper-lang-detector/test/index.js

Lines changed: 0 additions & 29 deletions
This file was deleted.

packages/metascraper-lang-detector/test/mocha.opts

Lines changed: 0 additions & 6 deletions
This file was deleted.

packages/metascraper/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
"cheerio": "~1.0.0-rc.2",
5656
"cheerio-advanced-selectors": "~2.0.1",
5757
"lodash": "~4.17.11",
58-
"p-reduce": "~2.0.0",
5958
"whoops": "~4.0.2"
6059
},
6160
"devDependencies": {

packages/metascraper/src/get-data.js

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

3-
const { isEmpty } = require('lodash')
4-
const pReduce = require('p-reduce')
3+
const { map, fromPairs, isEmpty } = require('lodash')
54

65
const getValue = async ({ htmlDom, url, conditions, meta }) => {
76
const size = conditions.length
@@ -15,15 +14,15 @@ const getValue = async ({ htmlDom, url, conditions, meta }) => {
1514
return value
1615
}
1716

18-
const getData = ({ rules, htmlDom, url }) =>
19-
pReduce(
20-
rules,
21-
async (acc, [propName, conditions]) => {
22-
const value = await getValue({ htmlDom, url, conditions, meta: acc })
23-
acc[propName] = !isEmpty(value) ? value : null
24-
return acc
25-
},
26-
{}
17+
const getData = async ({ rules, htmlDom, url }) => {
18+
const data = await Promise.all(
19+
map(rules, async ([propName, conditions]) => {
20+
const value = await getValue({ htmlDom, url, conditions })
21+
return [propName, !isEmpty(value) ? value : null]
22+
})
2723
)
2824

25+
return fromPairs(data)
26+
}
27+
2928
module.exports = getData

0 commit comments

Comments
 (0)