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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dependency-cruiser",
3
- "version": "11.8.0",
3
+ "version": "11.9.0-beta-1",
4
4
  "description": "Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.",
5
5
  "keywords": [
6
6
  "static analysis",
@@ -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").ICruiseOptions} pOptions -
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 _get = require("lodash/get");
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').ICruiseOptions} pOptions
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
- !_get(pOptions, "includeOnly.path") ||
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
- (!_get(pOptions, "exclude.path") ||
35
+ (!get(pOptions, "exclude.path") ||
31
36
  !filenameMatchesPattern(pFullPathToFile, pOptions.exclude.path)) &&
32
- (!_get(pOptions, "doNotFollow.path") ||
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').ICruiseOptions} pOptions options that
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').ICruiseOptions} pOptions options that
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').ICruiseOptions} pCruiseOptions
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").ICruiseOptions} pCruiseOptions cruise options
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
@@ -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").ICruiseOptions} pCruiseOptions
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
  );
@@ -1,4 +1,4 @@
1
- /** @type {import('../../../types/options').ICruiseOptions} */
1
+ /** @type {import('../../../types/strict-options').IStrictCruiseOptions} */
2
2
  module.exports = {
3
3
  validate: false,
4
4
  maxDepth: 0,
@@ -110,11 +110,10 @@ function shouldCalculateMetrics(pOptions) {
110
110
 
111
111
  /**
112
112
  *
113
- * @param {Partial<import('../../../types/options').ICruiseOptions>} pOptions
114
- * @returns {import('../../../types/options').ICruiseOptions}
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/dependency-cruiser").IFormatOptions}
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 [description]
38
- * @return {import("../../../types/dependency-cruiser").IFlattenedRuleSet} [description]
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
- if (has(pRuleSet, "allowed")) {
42
- pRuleSet.allowedSeverity = normalizeSeverity(pRuleSet.allowedSeverity);
43
- if (pRuleSet.allowedSeverity === "ignore") {
44
- Reflect.deleteProperty(pRuleSet, "allowed");
45
- Reflect.deleteProperty(pRuleSet, "allowedSeverity");
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
- pRuleSet.allowed = pRuleSet.allowed.map((pRule) => ({
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(pRuleSet, "forbidden")) {
57
- pRuleSet.forbidden = pRuleSet.forbidden
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(pRuleSet, "required")) {
63
- pRuleSet.required = pRuleSet.required
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 pRuleSet;
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
- let lValue = get(lPropertyContainer, lProperty);
27
-
28
- if (Array.isArray(lValue)) {
29
- set(lPropertyContainer, lProperty, lValue.join("|"));
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,7 +1,7 @@
1
1
  /* generated - don't edit */
2
2
 
3
3
  module.exports = {
4
- version: "11.8.0",
4
+ version: "11.9.0-beta-1",
5
5
  engines: {
6
6
  node: "^12.20||^14||>=16",
7
7
  },
@@ -1,58 +1,10 @@
1
1
  /* eslint-disable security/detect-object-injection */
2
2
  const Handlebars = require("handlebars/runtime");
3
- const _get = require("lodash/get");
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 _get = require("lodash/get");
2
- const _has = require("lodash/has");
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 = _get(pRuleSetUsed, "allowed", []);
8
- const lCommentedRule = lAllowed.find((pRule) => _has(pRule, "comment"));
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: _get(pRuleSetUsed, "allowedSeverity", "warn"),
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,
@@ -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 = "&nbsp;".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)}&nbsp;_${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)}&nbsp;_${
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").IAnyRuleType} pRule a dependency-cruiser rule
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
 
@@ -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"]
@@ -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
+ }