UNPKG

dependency-cruiser

Version:

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

92 lines (88 loc) 3.16 kB
/* eslint-disable no-inline-comments */ // @ts-check import { isDeepStrictEqual } from "node:util"; import { getSHA, list } from "watskeburt"; import { bus } from "../utl/bus.mjs"; import { isInterestingChangeType, addCheckSumToChangeSync, excludeFilter, includeOnlyFilter, changeHasInterestingExtension, } from "./helpers.mjs"; export default class MetaDataStrategy { /** * @param {string} _pDirectory * @param {import("../../types/cruise-result.js").ICruiseResult} _pCachedCruiseResult * @param {Object} pOptions * @param {Set<string>} pOptions.extensions * @param {Set<import("watskeburt").changeTypeType>} pOptions.interestingChangeTypes * @param {typeof getSHA=} pOptions.shaRetrievalFn * @param {typeof list=} pOptions.diffListFn * @param {typeof addCheckSumToChangeSync=} pOptions.checksumFn * @returns {Promise<import("../../types/dependency-cruiser.js").IRevisionData>} */ async getRevisionData( _pDirectory, _pCachedCruiseResult, pCruiseOptions, pOptions ) { const lOptions = { shaRetrievalFn: getSHA, diffListFn: list, checksumFn: addCheckSumToChangeSync, ...pOptions, }; try { bus.debug("cache: - getting sha"); const lSHA = await lOptions.shaRetrievalFn(); bus.debug("cache: - getting diff"); const lDiff = /** @type {import("watskeburt").IChange[]} */ ( await lOptions.diffListFn(lSHA) ); const lChanges = lDiff .filter(({ name }) => excludeFilter(pCruiseOptions.exclude)(name)) .filter(({ name }) => includeOnlyFilter(pCruiseOptions.includeOnly)(name) ) .filter(changeHasInterestingExtension(lOptions.extensions)) .filter(isInterestingChangeType(lOptions.interestingChangeTypes)); bus.debug("cache: - sha-summing diff"); return { SHA1: lSHA, changes: lChanges.map(lOptions.checksumFn), }; } catch (pError) { throw new Error( `The --cache option works in concert with git - and it seems either the current folder isn't version managed or git isn't installed. Error:${`\n\n ${pError}\n`}` ); } } /** * @param {import("../../types/dependency-cruiser.js").IRevisionData} pExistingRevisionData * @param {import("../../types/dependency-cruiser.js").IRevisionData} pNewRevisionData * @returns {boolean} */ revisionDataEqual(pExistingRevisionData, pNewRevisionData) { return ( Boolean(pExistingRevisionData) && Boolean(pNewRevisionData) && pExistingRevisionData.SHA1 === pNewRevisionData.SHA1 && isDeepStrictEqual(pExistingRevisionData.changes, pNewRevisionData.changes) ); } /** * @param {import("../../types/dependency-cruiser.js").ICruiseResult} pCruiseResult * @param {import("../../types/dependency-cruiser.js").IRevisionData=} pRevisionData * @returns {import("../../types/dependency-cruiser.js").ICruiseResult} */ prepareRevisionDataForSaving(pCruiseResult, pRevisionData) { return pRevisionData ? { ...pCruiseResult, revisionData: pRevisionData, } : pCruiseResult; } }