summaryrefslogtreecommitdiff
path: root/bin/wiki/ImportarDesdeURL/node_modules/metascraper/src/get-data.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/metascraper/src/get-data.js')
-rw-r--r--bin/wiki/ImportarDesdeURL/node_modules/metascraper/src/get-data.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/metascraper/src/get-data.js b/bin/wiki/ImportarDesdeURL/node_modules/metascraper/src/get-data.js
new file mode 100644
index 00000000..55627e61
--- /dev/null
+++ b/bin/wiki/ImportarDesdeURL/node_modules/metascraper/src/get-data.js
@@ -0,0 +1,46 @@
+'use strict'
+
+const { isString, map, fromPairs } = require('lodash')
+const { hasValue } = require('@metascraper/helpers')
+const mapValuesDeep = require('map-values-deep')
+
+const xss = require('xss')
+
+const noopTest = () => true
+
+const getValue = async ({ htmlDom, url, rules, meta }) => {
+ const lastIndex = rules.length
+ let index = 0
+ let value
+
+ do {
+ const rule = rules[index++]
+ const test = rule.test || noopTest
+ if (test({ htmlDom, url, meta })) {
+ value = await rule({ htmlDom, url, meta })
+ }
+ } while (!hasValue(value) && index < lastIndex)
+
+ return value
+}
+
+const escapeValue = (value, { escape }) =>
+ !escape
+ ? value
+ : mapValuesDeep(value, value => (isString(value) ? xss(value) : value))
+
+const getData = async ({ rules, htmlDom, url, escape }) => {
+ const data = await Promise.all(
+ map(rules, async ([propName, innerRules]) => {
+ const rawValue = await getValue({ htmlDom, url, rules: innerRules })
+ const value = hasValue(rawValue)
+ ? escapeValue(rawValue, { escape })
+ : null
+ return [propName, value]
+ })
+ )
+
+ return fromPairs(data)
+}
+
+module.exports = getData