UNPKG

dependency-cruiser

Version:

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

47 lines (42 loc) 1.29 kB
import { compareRules } from "./compare.mjs"; import { uniqBy } from "#utl/array-util.mjs"; function mergeModule(pLeftModule, pRightModule) { return { ...pLeftModule, ...pRightModule, dependencies: uniqBy( pLeftModule.dependencies.concat(pRightModule.dependencies), (pDependency) => pDependency.resolved, ), rules: pLeftModule.rules .concat(pRightModule?.rules ?? []) .sort(compareRules), valid: pLeftModule.valid && pRightModule.valid, consolidated: pLeftModule.consolidated || pRightModule.consolidated, }; } function mergeModules(pSourceString, pModules) { return pModules .filter((pModule) => pModule.source === pSourceString) .reduce( (pMergedModule, pCurrentModule) => mergeModule(pMergedModule, pCurrentModule), { dependencies: [], rules: [], valid: true, }, ); } export default function consolidateModules(pModules) { let lModules = structuredClone(pModules); let lReturnValue = []; while (lModules.length > 0) { lReturnValue.push(mergeModules(lModules[0].source, lModules)); lModules = lModules.filter( // eslint-disable-next-line no-loop-func (pModule) => pModule.source !== lModules[0].source, ); } return lReturnValue; }