bifocal/node_modules/gscan/lib/checks/080-helper-usage.js

44 lines
1.7 KiB
JavaScript

const _ = require('lodash');
const spec = require('../specs');
const {versions, getPackageJSON} = require('../utils');
module.exports = function checkUsage(theme, options) {
const checkVersion = _.get(options, 'checkVersion', versions.default);
let ruleSet = spec.get([checkVersion]);
const packageJSON = getPackageJSON(theme);
let targetApiVersion = (packageJSON && packageJSON.engines && packageJSON.engines['ghost-api']) || versions.default;
// CASE: 080-helper-usage checks only needs `rules` that start with `GS080-`
const ruleRegex = /GS080-.*/g;
ruleSet = _.pickBy(ruleSet.rules, function (rule, ruleCode) {
if (ruleCode.match(ruleRegex)) {
return rule;
}
});
_.each(ruleSet, function (check, ruleCode) {
_.each(theme.files, function (themeFile) {
var template = themeFile.file.match(/\.hbs$/);
const validApi = check.validInAPI ? check.validInAPI.includes(targetApiVersion) : true;
if (template) {
if (validApi && themeFile.content.match(check.regex)) {
if (!Object.prototype.hasOwnProperty.call(theme.results.fail, (ruleCode))) {
theme.results.fail[ruleCode] = {failures: []};
}
theme.results.fail[ruleCode].failures.push(
{
ref: themeFile.file
}
);
}
}
});
if (theme.results.pass.indexOf(ruleCode) === -1 && !Object.prototype.hasOwnProperty.call(theme.results.fail, ruleCode)) {
theme.results.pass.push(ruleCode);
}
});
return theme;
};