-
Notifications
You must be signed in to change notification settings - Fork 249
/
consolidate-to-pattern.mjs
51 lines (44 loc) · 1.5 KB
/
consolidate-to-pattern.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import consolidateModules from "./consolidate-modules.mjs";
import consolidateModuleDependencies from "./consolidate-module-dependencies.mjs";
function squashDependencyToPattern(pCollapsePattern) {
return (pDependency) => {
const lCollapseMatch = pDependency.resolved.match(pCollapsePattern);
return {
...pDependency,
resolved: lCollapseMatch ? lCollapseMatch[0] : pDependency.resolved,
};
};
}
function determineConsolidatedness(pConsolidated, pCollapseMatch, pSource) {
let lReturnValue = false;
// if it was already established it's consolidated (e.g. from an earlier
// consolidation step) there's no need to recalc
if (pConsolidated === true) {
lReturnValue = true;
} else {
lReturnValue = pCollapseMatch ? pCollapseMatch[0] !== pSource : false;
}
return lReturnValue;
}
function squashModuleToPattern(pCollapsePattern) {
return (pModule) => {
const lCollapseMatch = pModule.source.match(pCollapsePattern);
return {
...pModule,
source: lCollapseMatch ? lCollapseMatch[0] : pModule.source,
consolidated: determineConsolidatedness(
pModule.consolidated,
lCollapseMatch,
pModule.source
),
dependencies: pModule.dependencies.map(
squashDependencyToPattern(pCollapsePattern)
),
};
};
}
export default function consolidateToPattern(pModules, pCollapsePattern) {
return consolidateModules(
pModules.map(squashModuleToPattern(pCollapsePattern))
).map(consolidateModuleDependencies);
}