UNPKG

dependency-cruiser-fork

Version:

Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.

54 lines (46 loc) 1.62 kB
const _get = require("lodash/get"); const DEFAULT_THEME = require("./default-theme.json"); function matchesRE(pValue, pRE) { const lMatchResult = pValue.match && pValue.match(pRE); return Boolean(lMatchResult) && lMatchResult.length > 0; } function moduleMatchesCriteria(pSchemeEntry, pModule) { return Object.keys(pSchemeEntry.criteria).every( (pKey) => (_get(pModule, pKey) || Object.prototype.hasOwnProperty.call(pModule, pKey)) && (_get(pModule, pKey) === _get(pSchemeEntry.criteria, pKey) || matchesRE(_get(pModule, pKey), _get(pSchemeEntry.criteria, pKey))) ); } function determineAttributes(pModuleOrDependency, pAttributeCriteria) { return (pAttributeCriteria || []) .filter((pSchemeEntry) => moduleMatchesCriteria(pSchemeEntry, pModuleOrDependency) ) .map((pSchemeEntry) => pSchemeEntry.attributes) .reduce((pAll, pCurrent) => ({ ...pCurrent, ...pAll }), {}); } function normalizeTheme(pTheme) { let lReturnValue = DEFAULT_THEME; if (pTheme) { if (pTheme.replace) { lReturnValue = pTheme; } else { lReturnValue.graph = { ...DEFAULT_THEME.graph, ...pTheme.graph }; lReturnValue.node = { ...DEFAULT_THEME.node, ...pTheme.node }; lReturnValue.edge = { ...DEFAULT_THEME.edge, ...pTheme.edge }; lReturnValue.modules = (pTheme.modules || []).concat( DEFAULT_THEME.modules ); lReturnValue.dependencies = (pTheme.dependencies || []).concat( DEFAULT_THEME.dependencies ); } } return lReturnValue; } module.exports = { normalizeTheme, determineAttributes, };