1 | const _get = require("lodash/get");
|
2 | const matchFacade = require("./match-facade");
|
3 |
|
4 | function getFocusModules(pModules, pFilter) {
|
5 | return pModules
|
6 | .filter((pModule) => matchFacade.moduleMatchesFilter(pModule, pFilter))
|
7 | .map((pModule) => ({ ...pModule, matchesFocus: true }));
|
8 | }
|
9 |
|
10 | function getCallingModules(pModules, pFilter) {
|
11 | return pModules
|
12 | .filter(
|
13 | (pModule) =>
|
14 | !matchFacade.moduleMatchesFilter(pModule, pFilter) &&
|
15 | pModule.dependencies.some((pDependency) =>
|
16 | matchFacade.dependencyMatchesFilter(pDependency, pFilter)
|
17 | )
|
18 | )
|
19 | .map((pModule) => ({
|
20 | ...pModule,
|
21 | matchesFocus: false,
|
22 | dependencies: pModule.dependencies.filter((pDependency) =>
|
23 | matchFacade.dependencyMatchesFilter(pDependency, pFilter)
|
24 | ),
|
25 | }));
|
26 | }
|
27 |
|
28 | function getCalledModules(pModules, pFilter, pFocusModules) {
|
29 | const lCalledModuleNames = new Set(
|
30 | pFocusModules.reduce(
|
31 | (pAll, pModule) =>
|
32 | pAll.concat(pModule.dependencies.map(({ resolved }) => resolved)),
|
33 | []
|
34 | )
|
35 | );
|
36 |
|
37 | return pModules
|
38 | .filter(
|
39 | (pModule) =>
|
40 | !matchFacade.moduleMatchesFilter(pModule, pFilter) &&
|
41 | lCalledModuleNames.has(pModule.source)
|
42 | )
|
43 | .map((pModule) => ({ ...pModule, matchesFocus: false, dependencies: [] }));
|
44 | }
|
45 |
|
46 | module.exports = function addFocus(pModules, pFilter) {
|
47 | if (_get(pFilter, "path")) {
|
48 | const lFocusModules = getFocusModules(pModules, pFilter);
|
49 |
|
50 | return lFocusModules
|
51 | .concat(getCallingModules(pModules, pFilter))
|
52 | .concat(getCalledModules(pModules, pFilter, lFocusModules));
|
53 | }
|
54 | return pModules;
|
55 | };
|