dependency-cruiser
Version:
Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.
64 lines (56 loc) • 1.52 kB
JavaScript
import { compareRules } from "./compare.mjs";
import { uniq } from "#utl/array-util.mjs";
/**
* @import { IDependency, IModule } from "../../types/cruise-result.mjs";
*/
function mergeDependency(pLeftDependency, pRightDependency) {
return {
...pLeftDependency,
...pRightDependency,
dependencyTypes: uniq(
pLeftDependency.dependencyTypes.concat(pRightDependency.dependencyTypes),
),
rules: pLeftDependency.rules
.concat(pRightDependency?.rules ?? [])
.sort(compareRules),
valid: pLeftDependency.valid && pRightDependency.valid,
};
}
function mergeDependencies(pResolvedName, pDependencies) {
let lReturnValue = {
dependencyTypes: [],
rules: [],
valid: true,
};
for (const lDependency of pDependencies) {
if (lDependency.resolved === pResolvedName) {
lReturnValue = mergeDependency(lReturnValue, lDependency);
}
}
return lReturnValue;
}
/**
* @param {IDependency[]} pDependencies
* @returns {IDependency[]}
*/
function consolidateDependencies(pDependencies) {
const lProcessed = new Set();
const lReturnValue = [];
for (const lDependency of pDependencies) {
if (!lProcessed.has(lDependency.resolved)) {
lReturnValue.push(mergeDependencies(lDependency.resolved, pDependencies));
lProcessed.add(lDependency.resolved);
}
}
return lReturnValue;
}
/**
* @param {IModule} pModule
* @returns {IModule}
*/
export default function consolidateModuleDependencies(pModule) {
return {
...pModule,
dependencies: consolidateDependencies(pModule.dependencies),
};
}