dependency-cruiser 11.8.0 → 11.9.0-beta-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/enrich/summarize/index.js +1 -1
- package/src/extract/gather-initial-sources.js +13 -12
- package/src/extract/get-dependencies.js +2 -2
- package/src/extract/index.js +1 -1
- package/src/main/index.js +1 -0
- package/src/main/options/defaults.js +1 -1
- package/src/main/options/normalize.js +6 -4
- package/src/main/rule-set/normalize.js +37 -14
- package/src/main/utl/normalize-re-properties.js +19 -4
- package/src/meta.js +1 -1
- package/src/report/error-html/index.js +1 -49
- package/src/report/error-html/utl.js +50 -5
- package/src/report/index.js +2 -0
- package/src/report/markdown/index.js +111 -0
- package/src/schema/configuration.schema.js +1 -1
- package/src/schema/cruise-result.schema.js +1 -1
- package/src/validate/rule-classifiers.js +8 -2
- package/types/options.d.ts +1 -1
- package/types/rule-set.d.ts +4 -4
- package/types/strict-filter-types.d.ts +47 -0
- package/types/strict-options.d.ts +47 -0
- package/types/strict-restrictions.d.ts +47 -0
- package/types/strict-rule-set.d.ts +72 -0
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@ const {
|
|
|
14
14
|
* @param {import("../../../types/cruise-result").IModule[]} pModules -
|
|
15
15
|
* cruised modules that have been enriched with mandatory attributes &
|
|
16
16
|
* have been validated against rules as passed in the options
|
|
17
|
-
* @param {import("../../../types/options").
|
|
17
|
+
* @param {import("../../../types/options").IStrictCruiseOptions} pOptions -
|
|
18
18
|
* @param {string[]} pFileDirectoryArray -
|
|
19
19
|
* the files/ directories originally passed to be cruised
|
|
20
20
|
* @param {import("../../../types/dependency-cruiser").IFolder[]} pFolders -
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
const fs = require("fs");
|
|
2
2
|
const path = require("path");
|
|
3
3
|
const glob = require("glob");
|
|
4
|
-
const
|
|
4
|
+
const get = require("lodash/get");
|
|
5
5
|
const filenameMatchesPattern =
|
|
6
6
|
require("../graph-utl/match-facade").filenameMatchesPattern;
|
|
7
7
|
const pathToPosix = require("./utl/path-to-posix");
|
|
8
8
|
const transpileMeta = require("./transpile/meta");
|
|
9
|
+
const getExtension = require("./utl/get-extension");
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
*
|
|
12
|
-
* @param {import('../../types/options').
|
|
13
|
+
* @param {import('../../types/options').IStrictCruiseOptions} pOptions
|
|
13
14
|
* @returns {string[]}
|
|
14
15
|
*/
|
|
15
16
|
function getScannableExtensions(pOptions) {
|
|
@@ -18,18 +19,22 @@ function getScannableExtensions(pOptions) {
|
|
|
18
19
|
);
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
function fileIsScannable(pOptions, pPathToFile) {
|
|
23
|
+
return getScannableExtensions(pOptions).includes(getExtension(pPathToFile));
|
|
24
|
+
}
|
|
25
|
+
|
|
21
26
|
function shouldBeIncluded(pFullPathToFile, pOptions) {
|
|
22
27
|
return (
|
|
23
|
-
!
|
|
28
|
+
!get(pOptions, "includeOnly.path") ||
|
|
24
29
|
filenameMatchesPattern(pFullPathToFile, pOptions.includeOnly.path)
|
|
25
30
|
);
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
function shouldNotBeExcluded(pFullPathToFile, pOptions) {
|
|
29
34
|
return (
|
|
30
|
-
(!
|
|
35
|
+
(!get(pOptions, "exclude.path") ||
|
|
31
36
|
!filenameMatchesPattern(pFullPathToFile, pOptions.exclude.path)) &&
|
|
32
|
-
(!
|
|
37
|
+
(!get(pOptions, "doNotFollow.path") ||
|
|
33
38
|
!filenameMatchesPattern(pFullPathToFile, pOptions.doNotFollow.path))
|
|
34
39
|
);
|
|
35
40
|
}
|
|
@@ -37,7 +42,7 @@ function shouldNotBeExcluded(pFullPathToFile, pOptions) {
|
|
|
37
42
|
/**
|
|
38
43
|
*
|
|
39
44
|
* @param {string} pDirectoryName
|
|
40
|
-
* @param {import('../../types/options').
|
|
45
|
+
* @param {import('../../types/options').IStrictCruiseOptions} pOptions options that
|
|
41
46
|
* @returns {string[]}
|
|
42
47
|
*/
|
|
43
48
|
function gatherScannableFilesFromDirectory(pDirectoryName, pOptions) {
|
|
@@ -59,11 +64,7 @@ function gatherScannableFilesFromDirectory(pDirectoryName, pOptions) {
|
|
|
59
64
|
gatherScannableFilesFromDirectory(pFullPathToFile, pOptions)
|
|
60
65
|
);
|
|
61
66
|
}
|
|
62
|
-
if (
|
|
63
|
-
getScannableExtensions(pOptions).some((pExtension) =>
|
|
64
|
-
pFullPathToFile.endsWith(pExtension)
|
|
65
|
-
)
|
|
66
|
-
) {
|
|
67
|
+
if (fileIsScannable(pOptions, pFullPathToFile)) {
|
|
67
68
|
return pSum.concat(pFullPathToFile);
|
|
68
69
|
}
|
|
69
70
|
return pSum;
|
|
@@ -84,7 +85,7 @@ function gatherScannableFilesFromDirectory(pDirectoryName, pOptions) {
|
|
|
84
85
|
*
|
|
85
86
|
* @param {string[]} pFileAndDirectoryArray globs and/ or paths to files or
|
|
86
87
|
* directories to be gathered
|
|
87
|
-
* @param {import('../../types/dependency-cruiser').
|
|
88
|
+
* @param {import('../../types/dependency-cruiser').IStrictCruiseOptions} pOptions options that
|
|
88
89
|
* influence what needs to be gathered/ scanned
|
|
89
90
|
* notably useful attributes:
|
|
90
91
|
* - exclude - regexp of what to exclude
|
|
@@ -108,7 +108,7 @@ function extractWithTsc(
|
|
|
108
108
|
|
|
109
109
|
/**
|
|
110
110
|
*
|
|
111
|
-
* @param {import('../../types/dependency-cruiser').
|
|
111
|
+
* @param {import('../../types/dependency-cruiser').IStrictCruiseOptions} pCruiseOptions
|
|
112
112
|
* @param {string} pFileName
|
|
113
113
|
* @param {any} pTranspileOptions
|
|
114
114
|
* @returns {import('../../types/cruise-result').IDependency[]}
|
|
@@ -208,7 +208,7 @@ function compareDeps(pLeft, pRight) {
|
|
|
208
208
|
*
|
|
209
209
|
*
|
|
210
210
|
* @param {string} pFileName path to the file
|
|
211
|
-
* @param {import("../../types/dependency-cruiser").
|
|
211
|
+
* @param {import("../../types/dependency-cruiser").IStrictCruiseOptions} pCruiseOptions cruise options
|
|
212
212
|
* @param {import("../../types/dependency-cruiser").IResolveOptions} pResolveOptions webpack 'enhanced-resolve' options
|
|
213
213
|
* @param {import("../../types/dependency-cruiser").ITranspileOptions} pTranspileOptions an object with tsconfig ('typescript project') options
|
|
214
214
|
* ('flattened' so there's no need for file access on any
|
package/src/extract/index.js
CHANGED
|
@@ -141,7 +141,7 @@ function filterExcludedDynamicDependencies(pModule, pExclude) {
|
|
|
141
141
|
* returns an array of all the modules it finds that way.
|
|
142
142
|
*
|
|
143
143
|
* @param {string[]} pFileDirectoryArray
|
|
144
|
-
* @param {import("../../types/dependency-cruiser").
|
|
144
|
+
* @param {import("../../types/dependency-cruiser").IStrictCruiseOptions} pCruiseOptions
|
|
145
145
|
* @param {import("../../types/dependency-cruiser").IResolveOptions} pResolveOptions
|
|
146
146
|
* @param {import("../../types/dependency-cruiser").ITranspileOptions} pTranspileOptions
|
|
147
147
|
* @returns {Partial<import("../../types/dependency-cruiser").IModule[]>}
|
package/src/main/index.js
CHANGED
|
@@ -51,6 +51,7 @@ function futureCruise(
|
|
|
51
51
|
pTranspileOptions
|
|
52
52
|
) {
|
|
53
53
|
bus.emit("progress", "parsing options", c(1));
|
|
54
|
+
/** @type {import("../../types/strict-options").IStrictCruiseOptions} */
|
|
54
55
|
let lCruiseOptions = normalizeCruiseOptions(
|
|
55
56
|
validateCruiseOptions(pCruiseOptions)
|
|
56
57
|
);
|
|
@@ -110,11 +110,10 @@ function shouldCalculateMetrics(pOptions) {
|
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
*
|
|
113
|
-
* @param {
|
|
114
|
-
* @returns {import('../../../types/options').
|
|
113
|
+
* @param {import('../../../types/options').ICruiseOptions} pOptions
|
|
114
|
+
* @returns {import('../../../types/strict-options').IStrictCruiseOptions}
|
|
115
115
|
*/
|
|
116
116
|
function normalizeCruiseOptions(pOptions) {
|
|
117
|
-
/** @type {import('../../../types/options').ICruiseOptions} */
|
|
118
117
|
let lReturnValue = {
|
|
119
118
|
baseDir: process.cwd(),
|
|
120
119
|
...defaults,
|
|
@@ -145,6 +144,9 @@ function normalizeCruiseOptions(pOptions) {
|
|
|
145
144
|
);
|
|
146
145
|
}
|
|
147
146
|
lReturnValue.metrics = shouldCalculateMetrics(pOptions);
|
|
147
|
+
// if (has(pOptions, "ruleSet")) {
|
|
148
|
+
// lReturnValue.ruleSet = normalizeRuleSet(pOptions.ruleSet);
|
|
149
|
+
// }
|
|
148
150
|
|
|
149
151
|
return lReturnValue;
|
|
150
152
|
}
|
|
@@ -152,7 +154,7 @@ function normalizeCruiseOptions(pOptions) {
|
|
|
152
154
|
/**
|
|
153
155
|
*
|
|
154
156
|
* @param {import("../../../types/dependency-cruiser").IFormatOptions} pFormatOptions
|
|
155
|
-
* @returns {import("../../../types/
|
|
157
|
+
* @returns {import("../../../types/strict-options").IStrictFormatOptions}
|
|
156
158
|
*/
|
|
157
159
|
function normalizeFormatOptions(pFormatOptions) {
|
|
158
160
|
const lFormatOptions = clone(pFormatOptions);
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
const { cloneDeep } = require("lodash");
|
|
1
2
|
const has = require("lodash/has");
|
|
2
3
|
const normalizeREProperties = require("../utl/normalize-re-properties");
|
|
3
4
|
|
|
4
5
|
const VALID_SEVERITIES = /^(error|warn|info|ignore)$/;
|
|
5
6
|
const DEFAULT_SEVERITY = "warn";
|
|
6
7
|
const DEFAULT_RULE = "unnamed";
|
|
8
|
+
const DEFAULT_SCOPE = "module";
|
|
7
9
|
|
|
8
10
|
function normalizeSeverity(pSeverity) {
|
|
9
11
|
const lSeverity = pSeverity ? pSeverity : DEFAULT_SEVERITY;
|
|
@@ -12,11 +14,29 @@ function normalizeSeverity(pSeverity) {
|
|
|
12
14
|
? lSeverity
|
|
13
15
|
: DEFAULT_SEVERITY;
|
|
14
16
|
}
|
|
15
|
-
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param {string} pRuleName
|
|
20
|
+
* @returns {string}
|
|
21
|
+
*/
|
|
16
22
|
function normalizeName(pRuleName) {
|
|
17
23
|
return pRuleName ? pRuleName : DEFAULT_RULE;
|
|
18
24
|
}
|
|
19
25
|
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param {import("../../../types/shared-types").RuleScopeType} pScope?
|
|
29
|
+
* @returns {import("../../../types/shared-types").RuleScopeType}
|
|
30
|
+
*/
|
|
31
|
+
function normalizeScope(pScope) {
|
|
32
|
+
return pScope ? pScope : DEFAULT_SCOPE;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
*
|
|
37
|
+
* @param {import("../../../types/rule-set").IAnyRuleType} pRule
|
|
38
|
+
* @returns {import("../../../types/strict-rule-set").IStrictAnyRuleType}
|
|
39
|
+
*/
|
|
20
40
|
function normalizeRule(pRule) {
|
|
21
41
|
return {
|
|
22
42
|
...pRule,
|
|
@@ -24,6 +44,7 @@ function normalizeRule(pRule) {
|
|
|
24
44
|
name: normalizeName(pRule.name),
|
|
25
45
|
from: normalizeREProperties(pRule.from),
|
|
26
46
|
to: normalizeREProperties(pRule.to),
|
|
47
|
+
scope: normalizeScope(pRule.scope),
|
|
27
48
|
...(pRule.module ? { module: normalizeREProperties(pRule.module) } : {}),
|
|
28
49
|
};
|
|
29
50
|
}
|
|
@@ -34,17 +55,19 @@ function normalizeRule(pRule) {
|
|
|
34
55
|
* - rule name (default 'unnamed')
|
|
35
56
|
* - severity (default 'warn')
|
|
36
57
|
*
|
|
37
|
-
* @param {import("../../../types/dependency-cruiser").IFlattenedRuleSet} pRuleSet
|
|
38
|
-
* @return {import("../../../types/
|
|
58
|
+
* @param {import("../../../types/dependency-cruiser").IFlattenedRuleSet} pRuleSet
|
|
59
|
+
* @return {import("../../../types/strict-rule-set").IStrictRuleSet}
|
|
39
60
|
*/
|
|
40
61
|
module.exports = function normalizeRuleSet(pRuleSet) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
62
|
+
const lRuleSet = cloneDeep(pRuleSet);
|
|
63
|
+
|
|
64
|
+
if (has(lRuleSet, "allowed")) {
|
|
65
|
+
lRuleSet.allowedSeverity = normalizeSeverity(lRuleSet.allowedSeverity);
|
|
66
|
+
if (lRuleSet.allowedSeverity === "ignore") {
|
|
67
|
+
Reflect.deleteProperty(lRuleSet, "allowed");
|
|
68
|
+
Reflect.deleteProperty(lRuleSet, "allowedSeverity");
|
|
46
69
|
} else {
|
|
47
|
-
|
|
70
|
+
lRuleSet.allowed = lRuleSet.allowed.map((pRule) => ({
|
|
48
71
|
...pRule,
|
|
49
72
|
name: "not-in-allowed",
|
|
50
73
|
from: normalizeREProperties(pRule.from),
|
|
@@ -53,17 +76,17 @@ module.exports = function normalizeRuleSet(pRuleSet) {
|
|
|
53
76
|
}
|
|
54
77
|
}
|
|
55
78
|
|
|
56
|
-
if (has(
|
|
57
|
-
|
|
79
|
+
if (has(lRuleSet, "forbidden")) {
|
|
80
|
+
lRuleSet.forbidden = lRuleSet.forbidden
|
|
58
81
|
.map(normalizeRule)
|
|
59
82
|
.filter((pRule) => pRule.severity !== "ignore");
|
|
60
83
|
}
|
|
61
84
|
|
|
62
|
-
if (has(
|
|
63
|
-
|
|
85
|
+
if (has(lRuleSet, "required")) {
|
|
86
|
+
lRuleSet.required = lRuleSet.required
|
|
64
87
|
.map(normalizeRule)
|
|
65
88
|
.filter((pRule) => pRule.severity !== "ignore");
|
|
66
89
|
}
|
|
67
90
|
|
|
68
|
-
return
|
|
91
|
+
return lRuleSet;
|
|
69
92
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable security/detect-object-injection */
|
|
2
2
|
const get = require("lodash/get");
|
|
3
|
+
const has = require("lodash/has");
|
|
3
4
|
const set = require("lodash/set");
|
|
4
5
|
const cloneDeep = require("lodash/cloneDeep");
|
|
5
6
|
|
|
@@ -16,6 +17,18 @@ const RE_PROPERTIES = [
|
|
|
16
17
|
"viaSomeNot",
|
|
17
18
|
];
|
|
18
19
|
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param {string|string[]} pStringish
|
|
23
|
+
* @returns {string}
|
|
24
|
+
*/
|
|
25
|
+
function normalizeToREAsString(pStringish) {
|
|
26
|
+
if (Array.isArray(pStringish)) {
|
|
27
|
+
return pStringish.join("|");
|
|
28
|
+
}
|
|
29
|
+
return pStringish;
|
|
30
|
+
}
|
|
31
|
+
|
|
19
32
|
module.exports = function normalizeREProperties(
|
|
20
33
|
pPropertyContainer,
|
|
21
34
|
pREProperties = RE_PROPERTIES
|
|
@@ -23,10 +36,12 @@ module.exports = function normalizeREProperties(
|
|
|
23
36
|
let lPropertyContainer = cloneDeep(pPropertyContainer);
|
|
24
37
|
|
|
25
38
|
for (const lProperty of pREProperties) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
if (has(lPropertyContainer, lProperty)) {
|
|
40
|
+
set(
|
|
41
|
+
lPropertyContainer,
|
|
42
|
+
lProperty,
|
|
43
|
+
normalizeToREAsString(get(lPropertyContainer, lProperty))
|
|
44
|
+
);
|
|
30
45
|
}
|
|
31
46
|
}
|
|
32
47
|
return lPropertyContainer;
|
package/src/meta.js
CHANGED
|
@@ -1,58 +1,10 @@
|
|
|
1
1
|
/* eslint-disable security/detect-object-injection */
|
|
2
2
|
const Handlebars = require("handlebars/runtime");
|
|
3
|
-
const
|
|
4
|
-
const {
|
|
5
|
-
getFormattedAllowedRule,
|
|
6
|
-
mergeCountsIntoRule,
|
|
7
|
-
formatSummaryForReport,
|
|
8
|
-
} = require("./utl");
|
|
3
|
+
const { formatSummaryForReport, aggregateViolations } = require("./utl");
|
|
9
4
|
|
|
10
5
|
// eslint-disable-next-line import/no-unassigned-import
|
|
11
6
|
require("./error-html.template");
|
|
12
7
|
|
|
13
|
-
function aggregateCountsPerRule(pViolations) {
|
|
14
|
-
return pViolations.reduce((pAll, pCurrentViolation) => {
|
|
15
|
-
if (pAll[pCurrentViolation.rule.name]) {
|
|
16
|
-
pAll[pCurrentViolation.rule.name] =
|
|
17
|
-
pCurrentViolation.rule.severity === "ignore"
|
|
18
|
-
? {
|
|
19
|
-
count: pAll[pCurrentViolation.rule.name].count,
|
|
20
|
-
ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount + 1,
|
|
21
|
-
}
|
|
22
|
-
: {
|
|
23
|
-
count: pAll[pCurrentViolation.rule.name].count + 1,
|
|
24
|
-
ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount,
|
|
25
|
-
};
|
|
26
|
-
} else {
|
|
27
|
-
pAll[pCurrentViolation.rule.name] =
|
|
28
|
-
pCurrentViolation.rule.severity === "ignore"
|
|
29
|
-
? {
|
|
30
|
-
count: 0,
|
|
31
|
-
ignoredCount: 1,
|
|
32
|
-
}
|
|
33
|
-
: {
|
|
34
|
-
count: 1,
|
|
35
|
-
ignoredCount: 0,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return pAll;
|
|
39
|
-
}, {});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function aggregateViolations(pViolations, pRuleSetUsed) {
|
|
43
|
-
const lViolationCounts = aggregateCountsPerRule(pViolations);
|
|
44
|
-
|
|
45
|
-
return _get(pRuleSetUsed, "forbidden", [])
|
|
46
|
-
.concat(_get(pRuleSetUsed, "required", []))
|
|
47
|
-
.concat(getFormattedAllowedRule(pRuleSetUsed))
|
|
48
|
-
.map((pRule) => mergeCountsIntoRule(pRule, lViolationCounts))
|
|
49
|
-
.sort(
|
|
50
|
-
(pFirst, pSecond) =>
|
|
51
|
-
Math.sign(pSecond.count - pFirst.count) ||
|
|
52
|
-
pFirst.name.localeCompare(pSecond.name)
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
8
|
function massageSummaryIntoSomethingUsable(pResults) {
|
|
57
9
|
const lSummary = formatSummaryForReport(pResults.summary);
|
|
58
10
|
return {
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const get = require("lodash/get");
|
|
2
|
+
const has = require("lodash/has");
|
|
3
3
|
const { version } = require("../../../src/meta.js");
|
|
4
4
|
const { formatViolation, formatInstability } = require("../utl/index.js");
|
|
5
5
|
|
|
6
6
|
function getFormattedAllowedRule(pRuleSetUsed) {
|
|
7
|
-
const lAllowed =
|
|
8
|
-
const lCommentedRule = lAllowed.find((pRule) =>
|
|
7
|
+
const lAllowed = get(pRuleSetUsed, "allowed", []);
|
|
8
|
+
const lCommentedRule = lAllowed.find((pRule) => has(pRule, "comment"));
|
|
9
9
|
const lComment = lCommentedRule ? lCommentedRule.comment : "-";
|
|
10
10
|
|
|
11
11
|
return lAllowed.length > 0
|
|
12
12
|
? {
|
|
13
13
|
name: "not-in-allowed",
|
|
14
14
|
comment: lComment,
|
|
15
|
-
severity:
|
|
15
|
+
severity: get(pRuleSetUsed, "allowedSeverity", "warn"),
|
|
16
16
|
}
|
|
17
17
|
: [];
|
|
18
18
|
}
|
|
@@ -93,7 +93,52 @@ function formatSummaryForReport(pSummary) {
|
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
function aggregateCountsPerRule(pViolations) {
|
|
97
|
+
return pViolations.reduce((pAll, pCurrentViolation) => {
|
|
98
|
+
if (pAll[pCurrentViolation.rule.name]) {
|
|
99
|
+
pAll[pCurrentViolation.rule.name] =
|
|
100
|
+
pCurrentViolation.rule.severity === "ignore"
|
|
101
|
+
? {
|
|
102
|
+
count: pAll[pCurrentViolation.rule.name].count,
|
|
103
|
+
ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount + 1,
|
|
104
|
+
}
|
|
105
|
+
: {
|
|
106
|
+
count: pAll[pCurrentViolation.rule.name].count + 1,
|
|
107
|
+
ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount,
|
|
108
|
+
};
|
|
109
|
+
} else {
|
|
110
|
+
pAll[pCurrentViolation.rule.name] =
|
|
111
|
+
pCurrentViolation.rule.severity === "ignore"
|
|
112
|
+
? {
|
|
113
|
+
count: 0,
|
|
114
|
+
ignoredCount: 1,
|
|
115
|
+
}
|
|
116
|
+
: {
|
|
117
|
+
count: 1,
|
|
118
|
+
ignoredCount: 0,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return pAll;
|
|
122
|
+
}, {});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function aggregateViolations(pViolations, pRuleSetUsed) {
|
|
126
|
+
const lViolationCounts = aggregateCountsPerRule(pViolations);
|
|
127
|
+
|
|
128
|
+
return get(pRuleSetUsed, "forbidden", [])
|
|
129
|
+
.concat(get(pRuleSetUsed, "required", []))
|
|
130
|
+
.concat(getFormattedAllowedRule(pRuleSetUsed))
|
|
131
|
+
.map((pRule) => mergeCountsIntoRule(pRule, lViolationCounts))
|
|
132
|
+
.sort(
|
|
133
|
+
(pFirst, pSecond) =>
|
|
134
|
+
Math.sign(pSecond.count - pFirst.count) ||
|
|
135
|
+
Math.sign(pSecond.ignoredCount - pFirst.ignoredCount) ||
|
|
136
|
+
pFirst.name.localeCompare(pSecond.name)
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
96
140
|
module.exports = {
|
|
141
|
+
aggregateViolations,
|
|
97
142
|
getFormattedAllowedRule,
|
|
98
143
|
mergeCountsIntoRule,
|
|
99
144
|
formatSummaryForReport,
|
package/src/report/index.js
CHANGED
|
@@ -15,6 +15,7 @@ const text = require("./text");
|
|
|
15
15
|
const baseline = require("./baseline");
|
|
16
16
|
const metrics = require("./metrics");
|
|
17
17
|
const { getExternalPluginReporter } = require("./plugins");
|
|
18
|
+
const markdown = require("./markdown");
|
|
18
19
|
|
|
19
20
|
const TYPE2REPORTER = {
|
|
20
21
|
anon,
|
|
@@ -26,6 +27,7 @@ const TYPE2REPORTER = {
|
|
|
26
27
|
fdot,
|
|
27
28
|
flat: fdot,
|
|
28
29
|
"err-html": errorHtml,
|
|
30
|
+
markdown,
|
|
29
31
|
"err-long": errorLong,
|
|
30
32
|
err: error,
|
|
31
33
|
html,
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
const { version } = require("../../../src/meta.js");
|
|
2
|
+
const { aggregateViolations } = require("../error-html/utl");
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {import("../../../types/shared-types").SeverityType} pSeverity
|
|
6
|
+
*/
|
|
7
|
+
function severity2Icon(pSeverity) {
|
|
8
|
+
const lSeverity2IconMap = {
|
|
9
|
+
error: ":exclamation:",
|
|
10
|
+
info: ":grey_exclamation:",
|
|
11
|
+
};
|
|
12
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
13
|
+
return lSeverity2IconMap[pSeverity] || ":warning:";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @param {import("../../../types/cruise-result").ISummary} pSummary
|
|
19
|
+
*/
|
|
20
|
+
function formatStatsSummary(pSummary) {
|
|
21
|
+
const lSpacerLength = 4;
|
|
22
|
+
const lSpacer = " ".repeat(lSpacerLength);
|
|
23
|
+
return `**${pSummary.totalCruised}** modules${lSpacer}**${pSummary.totalDependenciesCruised}** dependencies${lSpacer}**${pSummary.error}** errors${lSpacer}**${pSummary.warn}** warnings${lSpacer}**${pSummary.info}** informational${lSpacer}**${pSummary.ignore}** ignored\n`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param {import("../../../types/cruise-result").ICruiseResult} pCruiseResult
|
|
29
|
+
*/
|
|
30
|
+
function formatViolatedRules(pCruiseResult) {
|
|
31
|
+
const lTableHead =
|
|
32
|
+
"|rule|violations|ignored|explanation\n|:---|:---:|:---:|:---|\n";
|
|
33
|
+
|
|
34
|
+
return aggregateViolations(
|
|
35
|
+
pCruiseResult.summary.violations,
|
|
36
|
+
pCruiseResult.summary.ruleSetUsed
|
|
37
|
+
)
|
|
38
|
+
.filter((pRule) => pRule.count > 0)
|
|
39
|
+
.reduce(
|
|
40
|
+
(pAll, pRule) =>
|
|
41
|
+
(pAll += `|${severity2Icon(pRule.severity)} _${pRule.name}_|**${
|
|
42
|
+
pRule.count
|
|
43
|
+
}**|**${pRule.ignoredCount}**|${pRule.comment}|\n`),
|
|
44
|
+
lTableHead
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
*
|
|
50
|
+
* @param {import("../../../types/cruise-result").ICruiseResult} pCruiseResult
|
|
51
|
+
*/
|
|
52
|
+
function formatSummary(pCruiseResult) {
|
|
53
|
+
let lReturnValue = formatStatsSummary(pCruiseResult.summary);
|
|
54
|
+
|
|
55
|
+
if (pCruiseResult.summary.violations.length > 0) {
|
|
56
|
+
lReturnValue += formatViolatedRules(pCruiseResult);
|
|
57
|
+
}
|
|
58
|
+
return lReturnValue;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
*
|
|
63
|
+
* @param {import("../../../types/cruise-result").IViolation[]} pViolations
|
|
64
|
+
*/
|
|
65
|
+
function formatViolations(pViolations) {
|
|
66
|
+
const lTableHead = "|violated rule|from|to|\n|:---|:---|:---|\n";
|
|
67
|
+
|
|
68
|
+
return pViolations
|
|
69
|
+
.filter((pViolation) => pViolation.rule.severity !== "ignore")
|
|
70
|
+
.reduce((pAll, pViolation) => {
|
|
71
|
+
return `${pAll}|${severity2Icon(pViolation.rule.severity)} _${
|
|
72
|
+
pViolation.rule.name
|
|
73
|
+
}_|\`${pViolation.from}\`|\`${pViolation.to}\`|\n`;
|
|
74
|
+
}, lTableHead);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
* @param {import("../../../types/cruise-result").ICruiseResult} pResults
|
|
80
|
+
*/
|
|
81
|
+
function report(pResults) {
|
|
82
|
+
let lReturnValue = "# Forbidden dependency check - results\n\n";
|
|
83
|
+
|
|
84
|
+
lReturnValue += `## :chart_with_upwards_trend: Summary\n\n${formatSummary(
|
|
85
|
+
pResults
|
|
86
|
+
)}\n\n`;
|
|
87
|
+
|
|
88
|
+
if (pResults.summary.violations.length > 0) {
|
|
89
|
+
lReturnValue += `<details><summary><h2>:fire: All violations</h2></summary>\n\n`;
|
|
90
|
+
lReturnValue += `${formatViolations(pResults.summary.violations)}`;
|
|
91
|
+
lReturnValue += "\n\n</details>\n\n";
|
|
92
|
+
} else {
|
|
93
|
+
lReturnValue +=
|
|
94
|
+
"## :revolving_hearts: No violations found\nGet gummy bears to celebrate.\n\n";
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
lReturnValue += `---\n[dependency-cruiser@${version}](https://www.github.com/sverweij/dependency-crduiser) / ${new Date().toISOString()}`;
|
|
98
|
+
|
|
99
|
+
return lReturnValue;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Returns the violations from a cruise in markdown format
|
|
104
|
+
*
|
|
105
|
+
* @param {import("../../../types/cruise-result").ICruiseResult} pResults
|
|
106
|
+
* @returns {import("../../../types/dependency-cruiser").IReporterOutput}
|
|
107
|
+
*/
|
|
108
|
+
module.exports = (pResults) => ({
|
|
109
|
+
output: report(pResults),
|
|
110
|
+
exitCode: 0,
|
|
111
|
+
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* generated - don't edit */
|
|
2
|
-
module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
|
|
2
|
+
module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* generated - don't edit */
|
|
2
|
-
module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid","circular"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}}}}
|
|
2
|
+
module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid","circular"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics","markdown"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}}}}
|
|
@@ -2,7 +2,7 @@ const has = require("lodash/has");
|
|
|
2
2
|
const get = require("lodash/get");
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @param {import("../../types/rule-set").
|
|
5
|
+
* @param {import("../../types/strict-rule-set").IStrictAnyRuleType} pRule a dependency-cruiser rule
|
|
6
6
|
* @returns {boolean} whether or not the rule is 'module only'
|
|
7
7
|
*/
|
|
8
8
|
function isModuleOnlyRule(pRule) {
|
|
@@ -13,8 +13,14 @@ function isModuleOnlyRule(pRule) {
|
|
|
13
13
|
has(pRule, "module")
|
|
14
14
|
);
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @param {import("../../types/strict-rule-set").IStrictAnyRuleType} pRule
|
|
19
|
+
* @returns {boolean} whether or not the scope of the rule is "folder" or something else
|
|
20
|
+
*/
|
|
17
21
|
function isFolderScope(pRule) {
|
|
22
|
+
// TODO might be possible to just rule pRule.scope as it's now
|
|
23
|
+
// normalized away before getting here.
|
|
18
24
|
return get(pRule, "scope", "module") === "folder";
|
|
19
25
|
}
|
|
20
26
|
|
package/types/options.d.ts
CHANGED
|
@@ -83,7 +83,7 @@ export interface ICruiseOptions {
|
|
|
83
83
|
* and the collapse options offer better, more reliable and more
|
|
84
84
|
* understandable results.
|
|
85
85
|
*/
|
|
86
|
-
maxDepth?: number;
|
|
86
|
+
maxDepth?: number | string;
|
|
87
87
|
/**
|
|
88
88
|
* an array of module systems to use for following dependencies;
|
|
89
89
|
* defaults to ["es6", "cjs", "amd"]
|
package/types/rule-set.d.ts
CHANGED
|
@@ -113,10 +113,6 @@ export interface IRequiredRuleType extends IBaseRuleType {
|
|
|
113
113
|
to: IRequiredToRestrictionType;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
export type IAllowedRuleType =
|
|
117
|
-
| IRegularAllowedRuleType
|
|
118
|
-
| IReachabilityAllowedRuleType;
|
|
119
|
-
|
|
120
116
|
export interface IRegularAllowedRuleType {
|
|
121
117
|
/**
|
|
122
118
|
* You can use this field to document why the rule is there.
|
|
@@ -134,6 +130,10 @@ export interface IRegularAllowedRuleType {
|
|
|
134
130
|
to: IToRestriction;
|
|
135
131
|
}
|
|
136
132
|
|
|
133
|
+
export type IAllowedRuleType =
|
|
134
|
+
| IRegularAllowedRuleType
|
|
135
|
+
| IReachabilityAllowedRuleType;
|
|
136
|
+
|
|
137
137
|
export type IAnyRuleType =
|
|
138
138
|
| IForbiddenRuleType
|
|
139
139
|
| IAllowedRuleType
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IDoNotFollowType,
|
|
3
|
+
IExcludeType,
|
|
4
|
+
IFocusType,
|
|
5
|
+
IIncludeOnlyType,
|
|
6
|
+
} from "./filter-types";
|
|
7
|
+
import { DependencyType } from "./shared-types";
|
|
8
|
+
|
|
9
|
+
export interface IStrictDoNotFollowType extends IDoNotFollowType {
|
|
10
|
+
/**
|
|
11
|
+
* a regular expression for modules to include, but not follow further
|
|
12
|
+
*/
|
|
13
|
+
path?: string;
|
|
14
|
+
/**
|
|
15
|
+
* an array of dependency types to include, but not follow further
|
|
16
|
+
*/
|
|
17
|
+
dependencyTypes?: DependencyType[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface IStrictExcludeType extends IExcludeType {
|
|
21
|
+
/**
|
|
22
|
+
* a regular expression for modules to exclude
|
|
23
|
+
*/
|
|
24
|
+
path?: string;
|
|
25
|
+
/**
|
|
26
|
+
* a boolean indicating whether or not to exclude dynamic dependencies
|
|
27
|
+
* leave out to match both
|
|
28
|
+
*/
|
|
29
|
+
dynamic?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface IStrictIncludeOnlyType extends IIncludeOnlyType {
|
|
33
|
+
/**
|
|
34
|
+
* regular expression describing which dependencies the function
|
|
35
|
+
* should cruise - anything not matching this will be skipped
|
|
36
|
+
*/
|
|
37
|
+
path: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface IStrictFocusType extends IFocusType {
|
|
41
|
+
/**
|
|
42
|
+
* dependency-cruiser will include modules matching this regular expression
|
|
43
|
+
* in its output, as well as their neighbours (direct dependencies and
|
|
44
|
+
* dependents)
|
|
45
|
+
*/
|
|
46
|
+
path: string;
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ICruiseOptions,
|
|
3
|
+
IFormatOptions,
|
|
4
|
+
ExternalModuleResolutionStrategyType,
|
|
5
|
+
} from "./options";
|
|
6
|
+
import { ModuleSystemType, OutputType } from "./shared-types";
|
|
7
|
+
import { IStrictRuleSet } from "./strict-rule-set";
|
|
8
|
+
import {
|
|
9
|
+
IStrictDoNotFollowType,
|
|
10
|
+
IStrictExcludeType,
|
|
11
|
+
IStrictFocusType,
|
|
12
|
+
IStrictIncludeOnlyType,
|
|
13
|
+
} from "./strict-filter-types";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* the ICruiseOptions interface is lenient in what it accepts for convenience
|
|
17
|
+
* and/ or backwards compatiblity reasons. Internally we use a stricter version
|
|
18
|
+
* of ICruiseOptions that
|
|
19
|
+
* - allows only one data type per attribute
|
|
20
|
+
* - makes some attributes mandatory so they're easier to work with
|
|
21
|
+
*/
|
|
22
|
+
export interface IStrictCruiseOptions extends ICruiseOptions {
|
|
23
|
+
validate: boolean;
|
|
24
|
+
ruleSet?: IStrictRuleSet;
|
|
25
|
+
doNotFollow: IStrictDoNotFollowType;
|
|
26
|
+
exclude: IStrictExcludeType;
|
|
27
|
+
includeOnly?: IStrictIncludeOnlyType;
|
|
28
|
+
focus?: IStrictFocusType;
|
|
29
|
+
collapse?: string;
|
|
30
|
+
maxDepth: number;
|
|
31
|
+
moduleSystems: ModuleSystemType[];
|
|
32
|
+
baseDir: string;
|
|
33
|
+
tsPreCompilationDeps: boolean | "specify";
|
|
34
|
+
extraExtensionsToScan: string[];
|
|
35
|
+
preserveSymlinks: boolean;
|
|
36
|
+
externalModuleResolutionStrategy: ExternalModuleResolutionStrategyType;
|
|
37
|
+
exoticRequireStrings: string[];
|
|
38
|
+
metrics: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface IStrictFormatOptions extends IFormatOptions {
|
|
42
|
+
exclude?: IStrictExcludeType;
|
|
43
|
+
includeOnly?: IStrictIncludeOnlyType;
|
|
44
|
+
focus?: IStrictFocusType;
|
|
45
|
+
collapse?: string;
|
|
46
|
+
outputType: OutputType;
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IBaseRestrictionType,
|
|
3
|
+
IFromRestriction,
|
|
4
|
+
IToRestriction,
|
|
5
|
+
IReachabilityToRestrictionType,
|
|
6
|
+
IRequiredToRestrictionType,
|
|
7
|
+
IDependentsModuleRestrictionType,
|
|
8
|
+
} from "./restrictions";
|
|
9
|
+
|
|
10
|
+
export interface IStrictBaseRestrictionType extends IBaseRestrictionType {
|
|
11
|
+
path?: string;
|
|
12
|
+
pathNot?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface IStrictFromRestriction extends IFromRestriction {
|
|
16
|
+
path?: string;
|
|
17
|
+
pathNot?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface IStrictToRestriction extends IToRestriction {
|
|
21
|
+
path?: string;
|
|
22
|
+
pathNot?: string;
|
|
23
|
+
via?: string;
|
|
24
|
+
viaNot?: string;
|
|
25
|
+
viaSomeNot?: string;
|
|
26
|
+
exoticRequire?: string;
|
|
27
|
+
exoticRequireNot?: string;
|
|
28
|
+
license?: string;
|
|
29
|
+
licenseNot?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface IStrictReachabilityToRestrictionType
|
|
33
|
+
extends IReachabilityToRestrictionType {
|
|
34
|
+
path?: string;
|
|
35
|
+
pathNot?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface IStrictRequiredToRestrictionType
|
|
39
|
+
extends IRequiredToRestrictionType {
|
|
40
|
+
path?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface IStrictDependentsModuleRestrictionType
|
|
44
|
+
extends IDependentsModuleRestrictionType {
|
|
45
|
+
path?: string;
|
|
46
|
+
pathNot?: string;
|
|
47
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { SeverityType, RuleScopeType } from "./shared-types";
|
|
2
|
+
import {
|
|
3
|
+
IBaseRuleType,
|
|
4
|
+
IRegularAllowedRuleType,
|
|
5
|
+
IFlattenedRuleSet,
|
|
6
|
+
} from "./rule-set";
|
|
7
|
+
import {
|
|
8
|
+
IStrictToRestriction,
|
|
9
|
+
IStrictFromRestriction,
|
|
10
|
+
IStrictBaseRestrictionType,
|
|
11
|
+
IStrictReachabilityToRestrictionType,
|
|
12
|
+
IStrictDependentsModuleRestrictionType,
|
|
13
|
+
IStrictRequiredToRestrictionType,
|
|
14
|
+
} from "./strict-restrictions";
|
|
15
|
+
|
|
16
|
+
export interface IStrictBaseRuleType extends IBaseRuleType {
|
|
17
|
+
name: string;
|
|
18
|
+
severity: SeverityType;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface IStrictRegularForbiddenRuleType extends IStrictBaseRuleType {
|
|
22
|
+
from: IStrictFromRestriction;
|
|
23
|
+
to: IStrictToRestriction;
|
|
24
|
+
scope: RuleScopeType;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface IStrictReachabilityForbiddenRuleType
|
|
28
|
+
extends IStrictBaseRuleType {
|
|
29
|
+
from: IStrictBaseRestrictionType;
|
|
30
|
+
to: IStrictReachabilityToRestrictionType;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface IStrictDependentsForbiddenRuleType
|
|
34
|
+
extends IStrictBaseRuleType {
|
|
35
|
+
module: IStrictDependentsModuleRestrictionType;
|
|
36
|
+
from: IStrictBaseRestrictionType;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface IStrictReachabilityAllowedRuleType {
|
|
40
|
+
from: IStrictBaseRestrictionType;
|
|
41
|
+
to: IStrictReachabilityToRestrictionType;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type IStrictForbiddenRuleType =
|
|
45
|
+
| IStrictRegularForbiddenRuleType
|
|
46
|
+
| IStrictReachabilityForbiddenRuleType
|
|
47
|
+
| IStrictDependentsForbiddenRuleType;
|
|
48
|
+
|
|
49
|
+
export interface IStrictRequiredRuleType extends IStrictBaseRuleType {
|
|
50
|
+
module: IStrictBaseRestrictionType;
|
|
51
|
+
to: IStrictRequiredToRestrictionType;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface IStrictRegularAllowedRuleType extends IRegularAllowedRuleType {
|
|
55
|
+
from: IStrictFromRestriction;
|
|
56
|
+
to: IStrictToRestriction;
|
|
57
|
+
}
|
|
58
|
+
export type IStrictAllowedRuleType =
|
|
59
|
+
| IStrictRegularAllowedRuleType
|
|
60
|
+
| IStrictReachabilityAllowedRuleType;
|
|
61
|
+
|
|
62
|
+
export type IStrictAnyRuleType =
|
|
63
|
+
| IStrictForbiddenRuleType
|
|
64
|
+
| IStrictAllowedRuleType
|
|
65
|
+
| IStrictRequiredRuleType;
|
|
66
|
+
|
|
67
|
+
export interface IStrictRuleSet extends IFlattenedRuleSet {
|
|
68
|
+
forbidden?: IStrictForbiddenRuleType[];
|
|
69
|
+
allowed?: IStrictAllowedRuleType[];
|
|
70
|
+
allowedSeverity?: SeverityType;
|
|
71
|
+
required?: IStrictRequiredRuleType[];
|
|
72
|
+
}
|