UNPKG

dependency-cruiser

Version:

Visualize and validate javascript dependencies. With your rules. ES6, CommonJS, AMD

59 lines (50 loc) 1.61 kB
"use strict"; const _ = require("lodash"); const fs = require("fs"); const ruleSetValidator = require('./ruleSetValidator'); const ruleSetNormalizer = require('./ruleSetNormalizer'); const readRules = _.memoize( pRuleSetFile => { let lRetval = JSON.parse(fs.readFileSync(pRuleSetFile, 'utf8')); ruleSetValidator.validate(lRetval); return ruleSetNormalizer.normalize(lRetval); } ); function matchRule(pFrom, pTo) { return pRule => pFrom.match(pRule.from) && pTo.match(pRule.to); } function validateAgainstRules(pRuleSet, pFrom, pTo) { let lMatchedRule = {}; if (pRuleSet.hasOwnProperty("allowed")){ lMatchedRule = pRuleSet.allowed.find(matchRule(pFrom, pTo)); if (!Boolean(lMatchedRule)){ return { valid: false, rule: { level: "warning", name: "not-in-allowed" } }; } } if (pRuleSet.hasOwnProperty("forbidden")){ lMatchedRule = pRuleSet.forbidden.find(matchRule(pFrom, pTo)); if (Boolean(lMatchedRule)){ return { valid: false, rule: { level: lMatchedRule.level, name : lMatchedRule.name } }; } } return {valid:true}; } function validate (pValidate, pRuleSetFile, pFrom, pTo) { if (!pValidate) { return {valid:true}; } return validateAgainstRules(readRules(pRuleSetFile), pFrom, pTo); } exports.validate = validate;