diff --git a/packages/metascraper/src/get-data.js b/packages/metascraper/src/get-data.js index 5b429bc1e..cf4df820c 100644 --- a/packages/metascraper/src/get-data.js +++ b/packages/metascraper/src/get-data.js @@ -1,8 +1,8 @@ 'use strict' const { isString, map, fromPairs } = require('lodash') -const { has } = require('@metascraper/helpers') const mapValuesDeep = require('map-values-deep') +const { has } = require('@metascraper/helpers') const xss = require('xss') const truthyTest = () => true diff --git a/packages/metascraper/src/index.js b/packages/metascraper/src/index.js index e7178b768..665595cfb 100644 --- a/packages/metascraper/src/index.js +++ b/packages/metascraper/src/index.js @@ -3,8 +3,7 @@ const { isUrl } = require('@metascraper/helpers') const whoops = require('whoops') -const mergeRules = require('./merge-rules') -const loadRules = require('./load-rules') +const { loadRules, mergeRules } = require('./rules') const loadHTML = require('./load-html') const getData = require('./get-data') diff --git a/packages/metascraper/src/load-rules.js b/packages/metascraper/src/load-rules.js deleted file mode 100644 index d591fa072..000000000 --- a/packages/metascraper/src/load-rules.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict' - -const { has, set, concat, forEach, chain, castArray } = require('lodash') - -module.exports = rulesBundle => - chain(rulesBundle) - .reduce((acc, { test, ...rules }) => { - forEach(rules, function (innerRules, propName) { - if (test) forEach(castArray(innerRules), rule => (rule.test = test)) - - set( - acc, - propName, - has(acc, propName) - ? concat(acc[propName], innerRules) - : concat(innerRules) - ) - - return acc - }) - return acc - }, {}) - .toPairs() - .value() diff --git a/packages/metascraper/src/merge-rules.js b/packages/metascraper/src/merge-rules.js deleted file mode 100644 index 7cdb395c3..000000000 --- a/packages/metascraper/src/merge-rules.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict' - -const { - cloneDeep, - concat, - first, - findIndex, - forEach, - chain -} = require('lodash') - -module.exports = (rules, baseRules) => - chain(rules) - .reduce((acc, { test, ...rules }) => { - forEach(rules, (innerRules, propName) => { - if (test) forEach(innerRules, rule => (rule.test = test)) - // find the rules associated with `propName` - const index = findIndex(acc, item => first(item) === propName) - // if `propName` has more rule, add the new rule from the end - if (index !== -1) acc[index][1] = concat(innerRules, ...acc[index][1]) - // otherwise, create an array of rules - else acc.push([propName, innerRules]) - }) - return acc - }, cloneDeep(baseRules)) - .value() diff --git a/packages/metascraper/src/rules.js b/packages/metascraper/src/rules.js new file mode 100644 index 000000000..ea583bac6 --- /dev/null +++ b/packages/metascraper/src/rules.js @@ -0,0 +1,54 @@ +'use strict' + +const { + cloneDeep, + concat, + first, + findIndex, + forEach, + chain, + castArray, + has, + set +} = require('lodash') + +const forEachRule = (collection, fn) => forEach(castArray(collection), fn) + +const loadRules = rulesBundle => + chain(rulesBundle) + .reduce((acc, { test, ...rules }) => { + forEach(rules, (innerRules, propName) => { + if (test) forEachRule(innerRules, rule => (rule.test = test)) + + set( + acc, + propName, + has(acc, propName) + ? concat(acc[propName], innerRules) + : concat(innerRules) + ) + + return acc + }) + return acc + }, {}) + .toPairs() + .value() + +const mergeRules = (rules, baseRules) => + chain(rules) + .reduce((acc, { test, ...rules }) => { + forEach(rules, (innerRules, propName) => { + if (test) forEachRule(innerRules, rule => (rule.test = test)) + // find the rules associated with `propName` + const index = findIndex(acc, item => first(item) === propName) + // if `propName` has more rule, add the new rule from the end + if (index !== -1) acc[index][1] = concat(innerRules, ...acc[index][1]) + // otherwise, create an array of rules + else acc.push([propName, castArray(innerRules)]) + }) + return acc + }, cloneDeep(baseRules)) + .value() + +module.exports = { mergeRules, loadRules }