UNPKG

dependency-cruiser

Version:

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

75 lines (68 loc) 2.31 kB
import { getReporter } from "#report/index.mjs"; import summarize from "#analyze/summarize/index.mjs"; import { applyFilters } from "#graph-utl/filter-bank.mjs"; import consolidateToPattern from "#graph-utl/consolidate-to-pattern.mjs"; import { compareModules } from "#graph-utl/compare.mjs"; import stripSelfTransitions from "#graph-utl/strip-self-transitions.mjs"; import { bus } from "#utl/bus.mjs"; /** * @import { ICruiseResult } from "../../types/cruise-result.mjs"; * @import { IFormatOptions } from "../../types/options.mjs"; * @import { IReporterOutput } from "../../types/dependency-cruiser.mjs"; */ /** * @param {ICruiseResult} pResult * @param {IFormatOptions} pFormatOptions * @returns {ICruiseResult} */ function reSummarizeResults(pResult, pFormatOptions) { let lModules = applyFilters(pResult.modules, pFormatOptions); if (Object.hasOwn(pFormatOptions, "collapse")) { lModules = consolidateToPattern(lModules, pFormatOptions.collapse) .sort(compareModules) .map(stripSelfTransitions); } return { ...pResult, summary: { ...pResult.summary, ...summarize( lModules, { ...pResult.summary.optionsUsed, ...pFormatOptions, }, (pResult.summary.optionsUsed.args || "").split(" "), // TODO: apply filters to the folders too pResult.folders, ), }, modules: lModules, }; } function getReporterSection(pOutputType) { return pOutputType === "x-dot-webpage" ? "dot" : pOutputType; } /** * * @param {ICruiseResult} pResult result of a previous run of dependency-cruiser * @param {IFormatOptions} pFormatOptions * @returns {IReporterOutput} */ export default async function reportWrap(pResult, pFormatOptions) { bus.debug("report: get"); const lReportFunction = await getReporter(pFormatOptions.outputType); const lReportOptions = pResult.summary.optionsUsed?.reporterOptions?.[ getReporterSection(pFormatOptions.outputType) ] ?? {}; bus.debug("report: execute"); return lReportFunction( reSummarizeResults(pResult, pFormatOptions), // passing format options here so reporters that read collapse patterns // from the result take the one passed in the format options instead Object.hasOwn(pFormatOptions, "collapse") ? { ...lReportOptions, collapsePattern: pFormatOptions.collapse } : lReportOptions, ); }