dependency-cruiser 11.7.1 → 11.9.0-beta-2

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.
@@ -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.7.1",
4
+ version: "11.9.0-beta-2",
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,145 @@
1
+ const { version } = require("../../../src/meta.js");
2
+ const { aggregateViolations } = require("../error-html/utl");
3
+
4
+ const REPORT_DEFAULTS = {
5
+ showTitle: true,
6
+ title: "Forbidden dependency check - results",
7
+
8
+ showSummary: true,
9
+ showSummaryHeader: true,
10
+ summaryHeader: ":chart_with_upwards_trend: Summary",
11
+ showStatsSummary: true,
12
+ showRulesSummary: true,
13
+
14
+ showDetails: true,
15
+ showDetailsHeader: true,
16
+ detailsHeader: ":fire: All violations",
17
+ collapseDetails: true,
18
+ collapsedMessage: "Violations found - click to expand",
19
+ noViolationsMessage:
20
+ ":revolving_hearts: No violations found. Get gummy bears to celebrate.",
21
+
22
+ showFooter: true,
23
+ footer: `---\n[dependency-cruiser@${version}](https://www.github.com/sverweij/dependency-cruiser) / ${new Date().toISOString()}`,
24
+ };
25
+
26
+ /**
27
+ *
28
+ * @param {import("../../../types/shared-types").SeverityType} pSeverity
29
+ */
30
+ function severity2Icon(pSeverity) {
31
+ const lSeverity2IconMap = {
32
+ error: ":exclamation:",
33
+ info: ":grey_exclamation:",
34
+ };
35
+ // eslint-disable-next-line security/detect-object-injection
36
+ return lSeverity2IconMap[pSeverity] || ":warning:";
37
+ }
38
+
39
+ /**
40
+ *
41
+ * @param {import("../../../types/cruise-result").ISummary} pSummary
42
+ */
43
+ function formatStatsSummary(pSummary) {
44
+ const lSpacerLength = 4;
45
+ const lSpacer = " ".repeat(lSpacerLength);
46
+ 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`;
47
+ }
48
+
49
+ /**
50
+ *
51
+ * @param {import("../../../types/cruise-result").ICruiseResult} pCruiseResult
52
+ */
53
+ function formatRulesSummary(pCruiseResult) {
54
+ const lTableHead =
55
+ "|rule|violations|ignored|explanation\n|:---|:---:|:---:|:---|\n";
56
+
57
+ return aggregateViolations(
58
+ pCruiseResult.summary.violations,
59
+ pCruiseResult.summary.ruleSetUsed
60
+ )
61
+ .filter((pRule) => pRule.count > 0)
62
+ .reduce(
63
+ (pAll, pRule) =>
64
+ (pAll += `|${severity2Icon(pRule.severity)} _${pRule.name}_|**${
65
+ pRule.count
66
+ }**|**${pRule.ignoredCount}**|${pRule.comment}|\n`),
67
+ lTableHead
68
+ );
69
+ }
70
+
71
+ /**
72
+ *
73
+ * @param {import("../../../types/cruise-result").IViolation[]} pViolations
74
+ */
75
+ function formatViolations(pViolations) {
76
+ const lTableHead = "|violated rule|from|to|\n|:---|:---|:---|\n";
77
+
78
+ return pViolations
79
+ .filter((pViolation) => pViolation.rule.severity !== "ignore")
80
+ .reduce((pAll, pViolation) => {
81
+ return `${pAll}|${severity2Icon(pViolation.rule.severity)} _${
82
+ pViolation.rule.name
83
+ }_|\`${pViolation.from}\`|\`${pViolation.to}\`|\n`;
84
+ }, lTableHead);
85
+ }
86
+
87
+ /**
88
+ *
89
+ * @param {import("../../../types/cruise-result").ICruiseResult} pResults
90
+ */
91
+ // eslint-disable-next-line complexity, max-statements
92
+ function report(pResults, pOptions) {
93
+ const lOptions = { ...REPORT_DEFAULTS, ...(pOptions || {}) };
94
+ let lReturnValue = "";
95
+
96
+ if (lOptions.showTitle) {
97
+ lReturnValue += `# ${lOptions.title}\n\n`;
98
+ }
99
+
100
+ if (lOptions.showSummary) {
101
+ if (lOptions.showSummaryHeader) {
102
+ lReturnValue += `## ${lOptions.summaryHeader}\n\n`;
103
+ }
104
+ lReturnValue += `${formatStatsSummary(pResults.summary)}\n\n`;
105
+
106
+ if (pResults.summary.violations.length > 0 && lOptions.showRulesSummary) {
107
+ lReturnValue += `${formatRulesSummary(pResults)}\n\n`;
108
+ }
109
+ }
110
+
111
+ if (lOptions.showDetails) {
112
+ if (pResults.summary.violations.length > 0) {
113
+ if (lOptions.showDetailsHeader) {
114
+ lReturnValue += `## ${lOptions.detailsHeader}\n\n`;
115
+ }
116
+ if (lOptions.collapseDetails) {
117
+ lReturnValue += `<details><summary>${lOptions.collapsedMessage}</summary>\n\n`;
118
+ }
119
+ lReturnValue += `${formatViolations(pResults.summary.violations)}\n\n`;
120
+ if (lOptions.collapseDetails) {
121
+ lReturnValue += "</details>\n\n";
122
+ }
123
+ } else {
124
+ lReturnValue += `${lOptions.noViolationsMessage}\n\n`;
125
+ }
126
+ }
127
+
128
+ if (lOptions.showFooter) {
129
+ lReturnValue += `${lOptions.footer}\n\n`;
130
+ }
131
+
132
+ return lReturnValue;
133
+ }
134
+
135
+ /**
136
+ * Returns the violations from a cruise in markdown format
137
+ *
138
+ * @param {import("../../../types/cruise-result").ICruiseResult} pResults
139
+ * * @param {any} pOptions
140
+ * @returns {import("../../../types/dependency-cruiser").IReporterOutput}
141
+ */
142
+ module.exports = (pResults, pOptions) => ({
143
+ output: report(pResults, pOptions),
144
+ exitCode: 0,
145
+ });
@@ -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"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"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"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"collapseDetails":{"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"}}]}}}