dependency-cruiser-fork
Version:
Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.
56 lines (49 loc) • 1.62 kB
JavaScript
const _get = require("lodash/get");
const matchFacade = require("./match-facade");
function getFocusModules(pModules, pFilter) {
return pModules
.filter((pModule) => matchFacade.moduleMatchesFilter(pModule, pFilter))
.map((pModule) => ({ ...pModule, matchesFocus: true }));
}
function getCallingModules(pModules, pFilter) {
return pModules
.filter(
(pModule) =>
!matchFacade.moduleMatchesFilter(pModule, pFilter) &&
pModule.dependencies.some((pDependency) =>
matchFacade.dependencyMatchesFilter(pDependency, pFilter)
)
)
.map((pModule) => ({
...pModule,
matchesFocus: false,
dependencies: pModule.dependencies.filter((pDependency) =>
matchFacade.dependencyMatchesFilter(pDependency, pFilter)
),
}));
}
function getCalledModules(pModules, pFilter, pFocusModules) {
const lCalledModuleNames = new Set(
pFocusModules.reduce(
(pAll, pModule) =>
pAll.concat(pModule.dependencies.map(({ resolved }) => resolved)),
[]
)
);
return pModules
.filter(
(pModule) =>
!matchFacade.moduleMatchesFilter(pModule, pFilter) &&
lCalledModuleNames.has(pModule.source)
)
.map((pModule) => ({ ...pModule, matchesFocus: false, dependencies: [] }));
}
module.exports = function addFocus(pModules, pFilter) {
if (_get(pFilter, "path")) {
const lFocusModules = getFocusModules(pModules, pFilter);
return lFocusModules
.concat(getCallingModules(pModules, pFilter))
.concat(getCalledModules(pModules, pFilter, lFocusModules));
}
return pModules;
};