Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 3x 3x 3x 3x 3x 3x 8x 8x 8x 8x 8x 8x 8x 8x 8x 60x 48x 48x 8x 3x 4x 4x 3x 2x 2x 3x | /** * SEO Defect class * To detect SEO defects */ const _ = { defaults: require('lodash/defaults'), defaultsDeep: require('lodash/defaultsDeep'), isArray: require('lodash/isArray'), }; const { DEFAULT_RULES_CONFIG, DEFAULT_RULES_DEFINITION, RULE_DEFINITION_TEMPLATE } = require('./config'); const validate = require('./validate'); const DEFAULT_CONFIG = { // Any additional config needed? } let rulesDef = Object.assign({}, DEFAULT_RULES_DEFINITION); let rulesConf = Object.assign({}, DEFAULT_RULES_CONFIG); class Defects { // config = {} // io = null /** * @param {object} io an instance of Io (input/output) class * @param {*} config defects config including rules and other config */ constructor(io, config) { this.config = _.defaultsDeep(config, DEFAULT_CONFIG); this.io = io; } /** * Run the SEO defects detection */ run() { const io = this.io; const { rules, overrideDefinition } = this.config // get$ will return a promise which resolve the $ object returned from the reader. io.get$ .then(($) => { const results = []; const completedRulesDef = _.defaultsDeep(overrideDefinition, rulesDef); const completedRulesConf = _.defaults(rules, rulesConf); for (let rule in completedRulesConf) { if (!completedRulesConf[rule]) continue; const issue = validate($, completedRulesDef[rule]); if (issue) results.push(issue); } io.write(results); }) .catch(err => console.error('Deffects errors: ', err)); } /** * Define a custom rule that can be applied later when detect for SEO defects * @param {*} config */ static defineRule(config) { const assignNewDef = (rule) => { rulesDef[rule.id] = _.defaults(rule, RULE_DEFINITION_TEMPLATE); rulesConf[rule.id] = true; } if (_.isArray(config)) { for (let rule of config) assignNewDef(rule); } else { assignNewDef(config); } } } // Export the detector and something you may need module.exports = Defects; |