dependency-cruiser-fork
Version:
Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.
92 lines (79 loc) • 2.83 kB
JavaScript
const Ajv = require("ajv");
const extract = require("../extract");
const enrich = require("../enrich");
const cruiseResultSchema = require("../schema/cruise-result.schema.json");
const meta = require("../extract/transpile/meta");
const report = require("../report");
const bus = require("../utl/bus");
const normalizeFilesAndDirectories = require("./files-and-dirs/normalize");
const validateRuleSet = require("./rule-set/validate");
const normalizeRuleSet = require("./rule-set/normalize");
const validateOptions = require("./options/validate");
const normalizeOptions = require("./options/normalize");
const normalizeResolveOptions = require("./resolve-options/normalize");
// see [api.md](../../doc/api.md) and/ or the
// [type definition](../../types/depencency-cruiser.d.ts) for details
function format(pResult, pOutputType) {
const ajv = new Ajv();
validateOptions.validateOutputType(pOutputType);
if (!ajv.validate(cruiseResultSchema, pResult)) {
throw new Error(
`The supplied dependency-cruiser result is not valid: ${ajv.errorsText()}.\n`
);
}
return report.getReporter(pOutputType)(pResult);
}
function futureCruise(
pFileAndDirectoryArray,
pCruiseOptions,
pResolveOptions,
pTranspileOptions
) {
bus.emit("progress", "parsing options");
pCruiseOptions = normalizeOptions(validateOptions(pCruiseOptions));
if (Boolean(pCruiseOptions.ruleSet)) {
bus.emit("progress", "parsing rule set");
pCruiseOptions.ruleSet = normalizeRuleSet(
validateRuleSet(pCruiseOptions.ruleSet)
);
}
bus.emit("progress", "making sense of files and directories");
const lNormalizedFileAndDirectoryArray = normalizeFilesAndDirectories(
pFileAndDirectoryArray
);
bus.emit("progress", "determining how to resolve");
const lNormalizedResolveOptions = normalizeResolveOptions(
pResolveOptions,
pCruiseOptions,
pTranspileOptions.tsConfig
);
bus.emit("progress", "reading files");
const lExtractionResult = extract(
lNormalizedFileAndDirectoryArray,
pCruiseOptions,
lNormalizedResolveOptions,
pTranspileOptions
);
bus.emit("progress", "analyzing");
const lCruiseResult = enrich(
lExtractionResult,
pCruiseOptions,
lNormalizedFileAndDirectoryArray
);
bus.emit("progress", "reporting");
return report.getReporter(pCruiseOptions.outputType)(lCruiseResult);
}
// see [api.md](../../doc/api.md) and/ or the
// [type definition](../../types/depencency-cruiser.d.ts) for details
function cruise(pFileAndDirectoryArray, pOptions, pResolveOptions, pTSConfig) {
return futureCruise(pFileAndDirectoryArray, pOptions, pResolveOptions, {
tsConfig: pTSConfig,
});
}
module.exports = {
cruise,
futureCruise,
format,
allExtensions: meta.allExtensions,
getAvailableTranspilers: meta.getAvailableTranspilers,
};