dependency-cruiser
Version:
Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.
90 lines (82 loc) • 2.57 kB
JavaScript
import has from "lodash/has.js";
import meta from "../../meta.js";
import {
getSourceFolderCandidates,
getTestFolderCandidates,
hasTestsWithinSource,
toSourceLocationArray,
} from "./environment-helpers.mjs";
import findExtensions from "./find-extensions.mjs";
/**
* @param {import("./types.js").IInitConfig} pInitOptions
* @param {string[]} pExtensions
* @returns {boolean}
*/
function usesTypeScript(pInitOptions, pExtensions) {
return Boolean(
pInitOptions.tsConfig ||
pInitOptions.tsPreCompilationDeps ||
(pExtensions || []).some((pExtension) =>
[".ts", ".tsx", ".d.ts", ".mts", ".d.mts", ".cts", ".d.cts"].includes(
pExtension
)
)
);
}
/**
* @param {import("./types.js").IInitConfig} pInitOptions
* @returns {string[]}
*/
function getExtensions(pInitOptions) {
let lFoldersToScan = pInitOptions.sourceLocation;
if (pInitOptions.hasTestsOutsideSource) {
lFoldersToScan = lFoldersToScan.concat(pInitOptions.testLocation);
}
return findExtensions(lFoldersToScan.length > 0 ? lFoldersToScan : ["."]);
}
/**
* @param {import("./types.js").IPartialInitConfig} pInitOptions
* @return {import("./types.js").IPartialInitConfig}
*/
function populate(pInitOptions) {
const lReturnValue = {
version: meta.version,
date: new Date().toJSON(),
configType: "self-contained",
...pInitOptions,
sourceLocation: toSourceLocationArray(
pInitOptions.sourceLocation || getSourceFolderCandidates()
),
testLocation: pInitOptions.isMonoRepo
? []
: toSourceLocationArray(
pInitOptions.testLocation || getTestFolderCandidates()
),
};
const lExtensions = getExtensions(lReturnValue);
lReturnValue.usesTypeScript = usesTypeScript(pInitOptions, lExtensions);
if (lReturnValue.specifyResolutionExtensions) {
lReturnValue.resolutionExtensions = lExtensions;
}
return lReturnValue;
}
/**
*
* @param {import("./types.js").IPartialInitConfig} pInitOptions
* @return {import("./types.js").IInitConfig}
*/
export default function normalizeInitOptions(pInitOptions) {
let lReturnValue = populate(pInitOptions);
if (lReturnValue.configType === "preset" && !lReturnValue.preset) {
lReturnValue.preset = "dependency-cruiser/configs/recommended-warn-only";
}
if (!has(lReturnValue, "hasTestsOutsideSource")) {
lReturnValue.hasTestsOutsideSource =
!pInitOptions.isMonoRepo &&
!hasTestsWithinSource(
lReturnValue.testLocation,
lReturnValue.sourceLocation
);
}
return lReturnValue;
}