dependency-cruiser 17.3.2 → 17.3.3-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.
Files changed (232) hide show
  1. package/bin/depcruise-baseline.mjs +43 -43
  2. package/bin/depcruise-fmt.mjs +89 -89
  3. package/bin/dependency-cruise.mjs +171 -171
  4. package/configs/plugins/3d-reporter-plugin.mjs +36 -36
  5. package/configs/plugins/stats-reporter-plugin.mjs +51 -51
  6. package/configs/recommended-strict.cjs +5 -5
  7. package/configs/recommended-warn-only.cjs +5 -5
  8. package/configs/recommended.cjs +22 -22
  9. package/configs/rules/no-circular.cjs +10 -10
  10. package/configs/rules/no-deprecated-core.cjs +10 -10
  11. package/configs/rules/no-duplicate-dependency-types.cjs +17 -17
  12. package/configs/rules/no-non-package-json.cjs +11 -11
  13. package/configs/rules/no-orphans.cjs +18 -18
  14. package/configs/rules/not-to-deprecated.cjs +10 -10
  15. package/configs/rules/not-to-unresolvable.cjs +10 -10
  16. package/package.json +170 -170
  17. package/src/cache/cache.mjs +139 -139
  18. package/src/cache/content-strategy.mjs +88 -88
  19. package/src/cache/find-content-changes.mjs +58 -58
  20. package/src/cache/helpers.mjs +52 -52
  21. package/src/cache/metadata-strategy.mjs +83 -83
  22. package/src/cache/options-compatible.mjs +56 -109
  23. package/src/cli/assert-node-environment-suitable.mjs +7 -7
  24. package/src/cli/defaults.mjs +5 -5
  25. package/src/cli/format-meta-info.mjs +22 -22
  26. package/src/cli/format.mjs +28 -28
  27. package/src/cli/index.mjs +145 -145
  28. package/src/cli/init-config/build-config.mjs +94 -94
  29. package/src/cli/init-config/environment-helpers.mjs +77 -77
  30. package/src/cli/init-config/find-extensions.mjs +27 -27
  31. package/src/cli/init-config/get-user-input.mjs +151 -151
  32. package/src/cli/init-config/index.mjs +88 -88
  33. package/src/cli/init-config/normalize-init-options.mjs +47 -47
  34. package/src/cli/init-config/utl.mjs +4 -4
  35. package/src/cli/init-config/validators.mjs +10 -10
  36. package/src/cli/init-config/write-config.mjs +21 -21
  37. package/src/cli/init-config/write-run-scripts-to-manifest.mjs +103 -107
  38. package/src/cli/listeners/cli-feedback.mjs +49 -49
  39. package/src/cli/listeners/ndjson.mjs +66 -66
  40. package/src/cli/listeners/performance-log/format-helpers.mjs +63 -63
  41. package/src/cli/listeners/performance-log/handlers.mjs +56 -56
  42. package/src/cli/listeners/performance-log/index.mjs +37 -37
  43. package/src/cli/normalize-cli-options.mjs +182 -182
  44. package/src/cli/tools/wrap-stream-in-html.mjs +37 -37
  45. package/src/cli/utl/assert-file-existence.mjs +7 -7
  46. package/src/cli/utl/io.mjs +28 -31
  47. package/src/config-utl/extract-babel-config.mjs +69 -69
  48. package/src/config-utl/extract-depcruise-config/index.mjs +54 -54
  49. package/src/config-utl/extract-depcruise-config/merge-configs.mjs +63 -63
  50. package/src/config-utl/extract-depcruise-config/read-config.mjs +9 -9
  51. package/src/config-utl/extract-depcruise-options.mjs +9 -9
  52. package/src/config-utl/extract-known-violations.mjs +49 -49
  53. package/src/config-utl/extract-ts-config.mjs +46 -48
  54. package/src/config-utl/extract-webpack-resolve-config.mjs +88 -88
  55. package/src/config-utl/make-absolute.mjs +5 -5
  56. package/src/enrich/add-validations.mjs +13 -13
  57. package/src/enrich/derive/circular.mjs +49 -49
  58. package/src/enrich/derive/dependents.mjs +27 -27
  59. package/src/enrich/derive/folders/aggregate-to-folders.mjs +104 -104
  60. package/src/enrich/derive/folders/index.mjs +19 -19
  61. package/src/enrich/derive/folders/utl.mjs +18 -18
  62. package/src/enrich/derive/metrics/get-module-metrics.mjs +27 -27
  63. package/src/enrich/derive/metrics/index.mjs +8 -8
  64. package/src/enrich/derive/module-utl.mjs +18 -18
  65. package/src/enrich/derive/orphan/index.mjs +18 -18
  66. package/src/enrich/derive/orphan/is-orphan.mjs +9 -9
  67. package/src/enrich/derive/reachable.mjs +165 -168
  68. package/src/enrich/enrich-modules.mjs +25 -25
  69. package/src/enrich/index.mjs +15 -15
  70. package/src/enrich/soften-known-violations.mjs +90 -90
  71. package/src/enrich/summarize/add-rule-set-used.mjs +13 -13
  72. package/src/enrich/summarize/get-stats.mjs +17 -17
  73. package/src/enrich/summarize/index.mjs +18 -18
  74. package/src/enrich/summarize/is-same-violation.mjs +30 -30
  75. package/src/enrich/summarize/summarize-folders.mjs +35 -35
  76. package/src/enrich/summarize/summarize-modules.mjs +97 -97
  77. package/src/enrich/summarize/summarize-options.mjs +71 -71
  78. package/src/extract/acorn/estree-helpers.mjs +66 -66
  79. package/src/extract/acorn/extract-amd-deps.mjs +63 -64
  80. package/src/extract/acorn/extract-cjs-deps.mjs +83 -83
  81. package/src/extract/acorn/extract-es6-deps.mjs +54 -54
  82. package/src/extract/acorn/extract-stats.mjs +4 -4
  83. package/src/extract/acorn/extract.mjs +28 -28
  84. package/src/extract/acorn/parse.mjs +37 -37
  85. package/src/extract/clear-caches.mjs +7 -7
  86. package/src/extract/extract-dependencies.mjs +109 -109
  87. package/src/extract/extract-stats.mjs +21 -21
  88. package/src/extract/gather-initial-sources.mjs +64 -64
  89. package/src/extract/helpers.mjs +73 -71
  90. package/src/extract/index.mjs +120 -120
  91. package/src/extract/resolve/determine-dependency-types.mjs +166 -169
  92. package/src/extract/resolve/external-module-helpers.mjs +76 -76
  93. package/src/extract/resolve/get-manifest.mjs +79 -79
  94. package/src/extract/resolve/index.mjs +175 -164
  95. package/src/extract/resolve/is-built-in.mjs +22 -24
  96. package/src/extract/resolve/merge-manifests.mjs +43 -43
  97. package/src/extract/resolve/module-classifiers.mjs +229 -229
  98. package/src/extract/resolve/resolve-amd.mjs +44 -44
  99. package/src/extract/resolve/resolve-cjs.mjs +40 -40
  100. package/src/extract/resolve/resolve-helpers.mjs +20 -20
  101. package/src/extract/resolve/resolve.mjs +26 -26
  102. package/src/extract/swc/dependency-visitor.mjs +211 -211
  103. package/src/extract/swc/extract-swc-deps.mjs +4 -4
  104. package/src/extract/swc/extract.mjs +7 -7
  105. package/src/extract/swc/parse.mjs +12 -12
  106. package/src/extract/transpile/babel-wrap.mjs +9 -9
  107. package/src/extract/transpile/coffeescript-wrap.mjs +21 -21
  108. package/src/extract/transpile/index.mjs +47 -47
  109. package/src/extract/transpile/javascript-wrap.mjs +6 -6
  110. package/src/extract/transpile/livescript-wrap.mjs +5 -5
  111. package/src/extract/transpile/meta.mjs +80 -80
  112. package/src/extract/transpile/svelte-preprocess.mjs +73 -73
  113. package/src/extract/transpile/svelte-wrap.mjs +19 -19
  114. package/src/extract/transpile/try-import-available.mjs +26 -27
  115. package/src/extract/transpile/typescript-wrap.mjs +39 -39
  116. package/src/extract/transpile/vue-template-wrap.cjs +43 -43
  117. package/src/extract/tsc/extract-stats.mjs +4 -4
  118. package/src/extract/tsc/extract-typescript-deps.mjs +429 -398
  119. package/src/extract/tsc/extract.mjs +22 -22
  120. package/src/extract/tsc/parse.mjs +21 -21
  121. package/src/graph-utl/add-focus.mjs +35 -35
  122. package/src/graph-utl/compare.mjs +24 -24
  123. package/src/graph-utl/consolidate-module-dependencies.mjs +35 -35
  124. package/src/graph-utl/consolidate-modules.mjs +33 -33
  125. package/src/graph-utl/consolidate-to-folder.mjs +13 -13
  126. package/src/graph-utl/consolidate-to-pattern.mjs +34 -34
  127. package/src/graph-utl/filter-bank.mjs +74 -69
  128. package/src/graph-utl/indexed-module-graph.mjs +227 -225
  129. package/src/graph-utl/match-facade.mjs +3 -3
  130. package/src/graph-utl/rule-set.mjs +20 -20
  131. package/src/graph-utl/strip-self-transitions.mjs +6 -6
  132. package/src/main/cruise.mjs +81 -81
  133. package/src/main/files-and-dirs/normalize.mjs +7 -7
  134. package/src/main/format.mjs +11 -14
  135. package/src/main/helpers.mjs +25 -25
  136. package/src/main/index.mjs +8 -8
  137. package/src/main/options/assert-validity.mjs +100 -100
  138. package/src/main/options/defaults.mjs +11 -11
  139. package/src/main/options/normalize.mjs +158 -160
  140. package/src/main/report-wrap.mjs +37 -37
  141. package/src/main/resolve-options/normalize.mjs +127 -128
  142. package/src/main/rule-set/assert-validity.mjs +67 -73
  143. package/src/main/rule-set/normalize.mjs +81 -79
  144. package/src/meta.cjs +15 -16
  145. package/src/report/anon/anonymize-path-element.mjs +20 -34
  146. package/src/report/anon/anonymize-path.mjs +11 -11
  147. package/src/report/anon/index.mjs +119 -119
  148. package/src/report/anon/random-string.mjs +23 -23
  149. package/src/report/azure-devops.mjs +75 -99
  150. package/src/report/baseline.mjs +9 -9
  151. package/src/report/csv.mjs +13 -13
  152. package/src/report/d2.mjs +105 -105
  153. package/src/report/dot/default-theme.mjs +152 -152
  154. package/src/report/dot/index.mjs +146 -146
  155. package/src/report/dot/module-utl.mjs +72 -72
  156. package/src/report/dot/prepare-custom-level.mjs +20 -20
  157. package/src/report/dot/prepare-flat-level.mjs +11 -11
  158. package/src/report/dot/prepare-folder-level.mjs +12 -13
  159. package/src/report/dot/theming.mjs +73 -73
  160. package/src/report/dot-webpage/dot-module.mjs +36 -36
  161. package/src/report/dot-webpage/svg-in-html-snippets/script.cjs +208 -210
  162. package/src/report/dot-webpage/svg-in-html-snippets/style.css +51 -51
  163. package/src/report/dot-webpage/wrap-in-html.mjs +7 -7
  164. package/src/report/error-html/index.mjs +49 -49
  165. package/src/report/error-html/utl.mjs +99 -99
  166. package/src/report/error-long.mjs +1 -1
  167. package/src/report/error.mjs +93 -93
  168. package/src/report/html/index.mjs +48 -48
  169. package/src/report/identity.mjs +4 -4
  170. package/src/report/index.mjs +33 -33
  171. package/src/report/json.mjs +4 -4
  172. package/src/report/markdown.mjs +120 -120
  173. package/src/report/mermaid.mjs +111 -111
  174. package/src/report/metrics.mjs +185 -185
  175. package/src/report/null.mjs +4 -4
  176. package/src/report/plugins.mjs +41 -41
  177. package/src/report/teamcity.mjs +150 -150
  178. package/src/report/text.mjs +42 -42
  179. package/src/report/utl/dependency-to-incidence-transformer.mjs +32 -32
  180. package/src/report/utl/index.mjs +53 -53
  181. package/src/schema/configuration.validate.mjs +1 -0
  182. package/src/schema/cruise-result.validate.mjs +1 -0
  183. package/src/schema/utl.mjs +6 -0
  184. package/src/utl/array-util.mjs +25 -25
  185. package/src/utl/bus.mjs +12 -12
  186. package/src/utl/extract-root-module-name.cjs +8 -8
  187. package/src/utl/find-all-files.mjs +54 -54
  188. package/src/utl/get-extension.mjs +2 -2
  189. package/src/utl/object-util.mjs +21 -22
  190. package/src/utl/path-to-posix.mjs +5 -5
  191. package/src/utl/regex-util.mjs +20 -20
  192. package/src/utl/try-import.mjs +42 -41
  193. package/src/utl/try-require.cjs +23 -23
  194. package/src/utl/wrap-and-indent.mjs +33 -33
  195. package/src/validate/index.mjs +65 -65
  196. package/src/validate/match-dependency-rule.mjs +47 -47
  197. package/src/validate/match-folder-dependency-rule.mjs +27 -27
  198. package/src/validate/match-module-rule-helpers.mjs +76 -76
  199. package/src/validate/match-module-rule.mjs +12 -12
  200. package/src/validate/matchers.mjs +162 -162
  201. package/src/validate/rule-classifiers.mjs +9 -9
  202. package/src/validate/violates-required-rule.mjs +23 -23
  203. package/types/cache-options.d.mts +27 -27
  204. package/types/config-utl/extract-babel-config.d.mts +1 -1
  205. package/types/config-utl/extract-depcruise-config.d.mts +3 -3
  206. package/types/config-utl/extract-depcruise-options.d.mts +1 -1
  207. package/types/config-utl/extract-ts-config.d.mts +1 -1
  208. package/types/config-utl/extract-webpack-resolve-config.d.mts +3 -3
  209. package/types/configuration.d.mts +10 -10
  210. package/types/cruise-result.d.mts +414 -414
  211. package/types/dependency-cruiser.d.mts +52 -52
  212. package/types/filter-types.d.mts +45 -45
  213. package/types/options.d.mts +430 -430
  214. package/types/plugins/3d-reporter-plugin.d.mts +9 -9
  215. package/types/plugins/mermaid-reporter-plugin.d.mts +10 -10
  216. package/types/plugins/stats-reporter-plugin.d.mts +9 -9
  217. package/types/reporter-options.d.mts +196 -196
  218. package/types/resolve-options.d.mts +23 -23
  219. package/types/restrictions.d.mts +174 -174
  220. package/types/rule-set.d.mts +132 -132
  221. package/types/rule-summary.d.mts +14 -14
  222. package/types/shared-types.d.mts +89 -89
  223. package/types/strict-filter-types.d.mts +52 -52
  224. package/types/strict-options.d.mts +34 -34
  225. package/types/strict-restrictions.d.mts +25 -25
  226. package/types/strict-rule-set.d.mts +36 -36
  227. package/types/violations.d.mts +40 -40
  228. package/src/schema/README.md +0 -5
  229. package/src/schema/baseline-violations.schema.mjs +0 -1
  230. package/src/schema/configuration.schema.mjs +0 -1
  231. package/src/schema/cruise-result.schema.mjs +0 -1
  232. package/types/README.md +0 -1
@@ -1,24 +1,24 @@
1
1
  import {
2
- determineFromExtras,
3
- aggregateViolations,
4
- determineTo,
2
+ determineFromExtras,
3
+ aggregateViolations,
4
+ determineTo,
5
5
  } from "./utl.mjs";
6
6
  import template from "./error-html-template.mjs";
7
7
  import meta from "#meta.cjs";
8
8
 
9
9
  function getViolatedRuleRowClass(pViolatedRule) {
10
- return pViolatedRule.unviolated ? ' class="unviolated"' : "";
10
+ return pViolatedRule.unviolated ? ' class="unviolated"' : "";
11
11
  }
12
12
 
13
13
  function getViolatedRuleOkNokCell(pViolatedRule) {
14
- if (pViolatedRule.unviolated) {
15
- return '<span class="ok">&check;</span>';
16
- }
17
- return `<span class="${pViolatedRule.severity}">&cross;</span>`;
14
+ if (pViolatedRule.unviolated) {
15
+ return '<span class="ok">&check;</span>';
16
+ }
17
+ return `<span class="${pViolatedRule.severity}">&cross;</span>`;
18
18
  }
19
19
 
20
20
  function buildViolatedRuleRow(pViolatedRule) {
21
- return `<tr${getViolatedRuleRowClass(pViolatedRule)}>
21
+ return `<tr${getViolatedRuleRowClass(pViolatedRule)}>
22
22
  <td>${getViolatedRuleOkNokCell(pViolatedRule)}</td>
23
23
  <td>${pViolatedRule.severity}</td>
24
24
  <td class="nowrap">
@@ -37,7 +37,7 @@ function buildViolatedRuleRow(pViolatedRule) {
37
37
  * @returns {string}
38
38
  */
39
39
  function constructViolatedRulesTable(pResults) {
40
- return `<table>
40
+ return `<table>
41
41
  <tbody>
42
42
  <thead>
43
43
  <tr>
@@ -50,11 +50,11 @@ function constructViolatedRulesTable(pResults) {
50
50
  </tr>
51
51
  </thead>
52
52
  ${aggregateViolations(
53
- pResults.summary.violations,
54
- pResults.summary.ruleSetUsed,
55
- )
56
- .map(buildViolatedRuleRow)
57
- .join("\n")}
53
+ pResults.summary.violations,
54
+ pResults.summary.ruleSetUsed,
55
+ )
56
+ .map(buildViolatedRuleRow)
57
+ .join("\n")}
58
58
  <tr>
59
59
  <td colspan="6" class="controls">
60
60
  <div id="show-unviolated">
@@ -74,7 +74,7 @@ function constructViolatedRulesTable(pResults) {
74
74
  * @returns {string}
75
75
  */
76
76
  function getViolationRowClass(pViolation) {
77
- return pViolation.rule.severity === "ignore" ? ' class="ignored"' : "";
77
+ return pViolation.rule.severity === "ignore" ? ' class="ignored"' : "";
78
78
  }
79
79
 
80
80
  /**
@@ -82,8 +82,8 @@ function getViolationRowClass(pViolation) {
82
82
  * @returns {string}
83
83
  */
84
84
  function constructViolationRow(pPrefix) {
85
- return (pViolation) => {
86
- return ` <tr${getViolationRowClass(pViolation)}>
85
+ return (pViolation) => {
86
+ return ` <tr${getViolationRowClass(pViolation)}>
87
87
  <td class="${pViolation.rule.severity}">${pViolation.rule.severity}</td>
88
88
  <td class="nowrap">
89
89
  <a href="#${pViolation.rule.name}-definition"
@@ -91,11 +91,11 @@ function constructViolationRow(pPrefix) {
91
91
  class="noiseless">${pViolation.rule.name}</a>
92
92
  </td>
93
93
  <td><a href="${pPrefix}${pViolation.from}">${
94
- pViolation.from
95
- }</a>${determineFromExtras(pViolation)}</td>
94
+ pViolation.from
95
+ }</a>${determineFromExtras(pViolation)}</td>
96
96
  <td>${determineTo(pViolation)}</td>
97
97
  </tr>`;
98
- };
98
+ };
99
99
  }
100
100
 
101
101
  /**
@@ -103,8 +103,8 @@ function constructViolationRow(pPrefix) {
103
103
  * @returns {string}
104
104
  */
105
105
  function constructViolationsList(pResults) {
106
- if (pResults.summary.violations.length > 0) {
107
- return `<span id="show-ignored-violations">
106
+ if (pResults.summary.violations.length > 0) {
107
+ return `<span id="show-ignored-violations">
108
108
  <h2><svg class="p__svg--inline" viewBox="0 0 12 16" version="1.1" aria-hidden="true">
109
109
  <path fill-rule="evenodd"
110
110
  d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z">
@@ -121,11 +121,11 @@ function constructViolationsList(pResults) {
121
121
  </thead>
122
122
  <tbody>
123
123
  ${pResults.summary.violations
124
- .map(constructViolationRow(pResults.summary.optionsUsed.prefix ?? ""))
125
- .join("\n")}
124
+ .map(constructViolationRow(pResults.summary.optionsUsed.prefix ?? ""))
125
+ .join("\n")}
126
126
  ${
127
- pResults.summary.ignore > 0
128
- ? `<tr>
127
+ pResults.summary.ignore > 0
128
+ ? `<tr>
129
129
  <td colspan="4" class="controls">
130
130
  <div id="show-ignored">
131
131
  &downarrow; <a href="#show-ignored-violations">also show ignored violations</a>
@@ -135,13 +135,13 @@ function constructViolationsList(pResults) {
135
135
  </div>
136
136
  </td>
137
137
  </tr>`
138
- : ""
139
- }
138
+ : ""
139
+ }
140
140
  </tbody>
141
141
  </table>
142
142
  </span>`;
143
- }
144
- return ` <h2><span aria-hidden="true">&hearts;</span> No violations found</h2>
143
+ }
144
+ return ` <h2><span aria-hidden="true">&hearts;</span> No violations found</h2>
145
145
  <p>Get gummy bears to celebrate.</p>`;
146
146
  }
147
147
 
@@ -150,20 +150,20 @@ function constructViolationsList(pResults) {
150
150
  * @returns {string}
151
151
  */
152
152
  function report(pResults) {
153
- return template
154
- .replace("{{totalCruised}}", pResults.summary.totalCruised)
155
- .replace(
156
- "{{totalDependenciesCruised}}",
157
- pResults.summary.totalDependenciesCruised,
158
- )
159
- .replace("{{error}}", pResults.summary.error)
160
- .replace("{{warn}}", pResults.summary.warn)
161
- .replace("{{info}}", pResults.summary.info)
162
- .replace("{{ignore}}", pResults.summary.ignore ?? 0)
163
- .replace("{{violatedRulesTable}}", constructViolatedRulesTable(pResults))
164
- .replace("{{violationsList}}", constructViolationsList(pResults))
165
- .replace("{{depcruiseVersion}}", `dependency-cruiser@${meta.version}`)
166
- .replace("{{runDate}}", new Date().toISOString());
153
+ return template
154
+ .replace("{{totalCruised}}", pResults.summary.totalCruised)
155
+ .replace(
156
+ "{{totalDependenciesCruised}}",
157
+ pResults.summary.totalDependenciesCruised,
158
+ )
159
+ .replace("{{error}}", pResults.summary.error)
160
+ .replace("{{warn}}", pResults.summary.warn)
161
+ .replace("{{info}}", pResults.summary.info)
162
+ .replace("{{ignore}}", pResults.summary.ignore ?? 0)
163
+ .replace("{{violatedRulesTable}}", constructViolatedRulesTable(pResults))
164
+ .replace("{{violationsList}}", constructViolationsList(pResults))
165
+ .replace("{{depcruiseVersion}}", `dependency-cruiser@${meta.version}`)
166
+ .replace("{{runDate}}", new Date().toISOString());
167
167
  }
168
168
 
169
169
  /**
@@ -174,8 +174,8 @@ function report(pResults) {
174
174
  * exitCode: 0
175
175
  */
176
176
  export default function errorHtml(pResults) {
177
- return {
178
- output: report(pResults),
179
- exitCode: 0,
180
- };
177
+ return {
178
+ output: report(pResults),
179
+ exitCode: 0,
180
+ };
181
181
  }
@@ -2,139 +2,139 @@ import { formatViolation, formatPercentage } from "../utl/index.mjs";
2
2
  import meta from "#meta.cjs";
3
3
 
4
4
  export function getFormattedAllowedRule(pRuleSetUsed) {
5
- const lAllowed = pRuleSetUsed?.allowed ?? [];
6
- const lCommentedRule = lAllowed.find((pRule) =>
7
- Object.hasOwn(pRule, "comment"),
8
- );
9
- const lComment = lCommentedRule ? lCommentedRule.comment : "-";
10
-
11
- return lAllowed.length > 0
12
- ? {
13
- name: "not-in-allowed",
14
- comment: lComment,
15
- severity: pRuleSetUsed?.allowedSeverity ?? "warn",
16
- }
17
- : [];
5
+ const lAllowed = pRuleSetUsed?.allowed ?? [];
6
+ const lCommentedRule = lAllowed.find((pRule) =>
7
+ Object.hasOwn(pRule, "comment"),
8
+ );
9
+ const lComment = lCommentedRule ? lCommentedRule.comment : "-";
10
+
11
+ return lAllowed.length > 0
12
+ ? {
13
+ name: "not-in-allowed",
14
+ comment: lComment,
15
+ severity: pRuleSetUsed?.allowedSeverity ?? "warn",
16
+ }
17
+ : [];
18
18
  }
19
19
 
20
20
  export function mergeCountsIntoRule(pRule, pViolationCounts) {
21
- const lCounts = pViolationCounts[pRule.name]
22
- ? pViolationCounts[pRule.name]
23
- : { count: 0, ignoredCount: 0 };
24
-
25
- return {
26
- ...pRule,
27
- count: lCounts.count,
28
- ignoredCount: lCounts.ignoredCount,
29
- unviolated: lCounts.count <= 0,
30
- };
21
+ const lCounts = pViolationCounts[pRule.name]
22
+ ? pViolationCounts[pRule.name]
23
+ : { count: 0, ignoredCount: 0 };
24
+
25
+ return {
26
+ ...pRule,
27
+ count: lCounts.count,
28
+ ignoredCount: lCounts.ignoredCount,
29
+ unviolated: lCounts.count <= 0,
30
+ };
31
31
  }
32
32
 
33
33
  function formatCycleTo(pViolation) {
34
- return pViolation.cycle.map(({ name }) => name).join(" &rightarrow;<br/>");
34
+ return pViolation.cycle.map(({ name }) => name).join(" &rightarrow;<br/>");
35
35
  }
36
36
 
37
37
  function formatReachabilityTo(pViolation) {
38
- return `${pViolation.to}<br/>${pViolation.via
39
- .map(({ name }) => name)
40
- .join(" &rightarrow;<br/>")}`;
38
+ return `${pViolation.to}<br/>${pViolation.via
39
+ .map(({ name }) => name)
40
+ .join(" &rightarrow;<br/>")}`;
41
41
  }
42
42
 
43
43
  function formatDependencyTo(pViolation) {
44
- return pViolation.to;
44
+ return pViolation.to;
45
45
  }
46
46
 
47
47
  function formatModuleTo() {
48
- return "";
48
+ return "";
49
49
  }
50
50
 
51
51
  function formatInstabilityTo(pViolation) {
52
- return `${pViolation.to}&nbsp;<span class="extra">(I: ${formatPercentage(
53
- pViolation.metrics.to.instability,
54
- )})</span>`;
52
+ return `${pViolation.to}&nbsp;<span class="extra">(I: ${formatPercentage(
53
+ pViolation.metrics.to.instability,
54
+ )})</span>`;
55
55
  }
56
56
 
57
57
  export function determineTo(pViolation) {
58
- const lViolationType2Formatter = {
59
- dependency: formatDependencyTo,
60
- module: formatModuleTo,
61
- cycle: formatCycleTo,
62
- reachability: formatReachabilityTo,
63
- instability: formatInstabilityTo,
64
- };
65
- return formatViolation(
66
- pViolation,
67
- lViolationType2Formatter,
68
- formatDependencyTo,
69
- );
58
+ const lViolationType2Formatter = {
59
+ dependency: formatDependencyTo,
60
+ module: formatModuleTo,
61
+ cycle: formatCycleTo,
62
+ reachability: formatReachabilityTo,
63
+ instability: formatInstabilityTo,
64
+ };
65
+ return formatViolation(
66
+ pViolation,
67
+ lViolationType2Formatter,
68
+ formatDependencyTo,
69
+ );
70
70
  }
71
71
 
72
72
  function formatInstabilityFromExtras(pViolation) {
73
- return `&nbsp;<span class="extra">(I: ${formatPercentage(
74
- pViolation.metrics.from.instability,
75
- )})</span>`;
73
+ return `&nbsp;<span class="extra">(I: ${formatPercentage(
74
+ pViolation.metrics.from.instability,
75
+ )})</span>`;
76
76
  }
77
77
 
78
78
  export function determineFromExtras(pViolation) {
79
- const lViolationType2Formatter = {
80
- instability: formatInstabilityFromExtras,
81
- };
82
- return formatViolation(pViolation, lViolationType2Formatter, () => "");
79
+ const lViolationType2Formatter = {
80
+ instability: formatInstabilityFromExtras,
81
+ };
82
+ return formatViolation(pViolation, lViolationType2Formatter, () => "");
83
83
  }
84
84
 
85
85
  export function formatSummaryForReport(pSummary) {
86
- return {
87
- ...pSummary,
88
- depcruiseVersion: `dependency-cruiser@${meta.version}`,
89
- runDate: new Date().toISOString(),
90
- violations: (pSummary.violations || []).map((pViolation) => ({
91
- ...pViolation,
92
- fromExtras: determineFromExtras(pViolation),
93
- to: determineTo(pViolation),
94
- })),
95
- };
86
+ return {
87
+ ...pSummary,
88
+ depcruiseVersion: `dependency-cruiser@${meta.version}`,
89
+ runDate: new Date().toISOString(),
90
+ violations: (pSummary.violations || []).map((pViolation) => ({
91
+ ...pViolation,
92
+ fromExtras: determineFromExtras(pViolation),
93
+ to: determineTo(pViolation),
94
+ })),
95
+ };
96
96
  }
97
97
 
98
98
  function aggregateCountsPerRule(pViolations) {
99
- return pViolations.reduce((pAll, pCurrentViolation) => {
100
- if (pAll[pCurrentViolation.rule.name]) {
101
- pAll[pCurrentViolation.rule.name] =
102
- pCurrentViolation.rule.severity === "ignore"
103
- ? {
104
- count: pAll[pCurrentViolation.rule.name].count,
105
- ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount + 1,
106
- }
107
- : {
108
- count: pAll[pCurrentViolation.rule.name].count + 1,
109
- ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount,
110
- };
111
- } else {
112
- pAll[pCurrentViolation.rule.name] =
113
- pCurrentViolation.rule.severity === "ignore"
114
- ? {
115
- count: 0,
116
- ignoredCount: 1,
117
- }
118
- : {
119
- count: 1,
120
- ignoredCount: 0,
121
- };
122
- }
123
- return pAll;
124
- }, {});
99
+ return pViolations.reduce((pAll, pCurrentViolation) => {
100
+ if (pAll[pCurrentViolation.rule.name]) {
101
+ pAll[pCurrentViolation.rule.name] =
102
+ pCurrentViolation.rule.severity === "ignore"
103
+ ? {
104
+ count: pAll[pCurrentViolation.rule.name].count,
105
+ ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount + 1,
106
+ }
107
+ : {
108
+ count: pAll[pCurrentViolation.rule.name].count + 1,
109
+ ignoredCount: pAll[pCurrentViolation.rule.name].ignoredCount,
110
+ };
111
+ } else {
112
+ pAll[pCurrentViolation.rule.name] =
113
+ pCurrentViolation.rule.severity === "ignore"
114
+ ? {
115
+ count: 0,
116
+ ignoredCount: 1,
117
+ }
118
+ : {
119
+ count: 1,
120
+ ignoredCount: 0,
121
+ };
122
+ }
123
+ return pAll;
124
+ }, {});
125
125
  }
126
126
 
127
127
  export function aggregateViolations(pViolations, pRuleSetUsed) {
128
- const lViolationCounts = aggregateCountsPerRule(pViolations);
129
-
130
- return (pRuleSetUsed?.forbidden ?? [])
131
- .concat(pRuleSetUsed?.required ?? [])
132
- .concat(getFormattedAllowedRule(pRuleSetUsed))
133
- .map((pRule) => mergeCountsIntoRule(pRule, lViolationCounts))
134
- .sort(
135
- (pFirst, pSecond) =>
136
- Math.sign(pSecond.count - pFirst.count) ||
137
- Math.sign(pSecond.ignoredCount - pFirst.ignoredCount) ||
138
- pFirst.name.localeCompare(pSecond.name),
139
- );
128
+ const lViolationCounts = aggregateCountsPerRule(pViolations);
129
+
130
+ return (pRuleSetUsed?.forbidden ?? [])
131
+ .concat(pRuleSetUsed?.required ?? [])
132
+ .concat(getFormattedAllowedRule(pRuleSetUsed))
133
+ .map((pRule) => mergeCountsIntoRule(pRule, lViolationCounts))
134
+ .sort(
135
+ (pFirst, pSecond) =>
136
+ Math.sign(pSecond.count - pFirst.count) ||
137
+ Math.sign(pSecond.ignoredCount - pFirst.ignoredCount) ||
138
+ pFirst.name.localeCompare(pSecond.name),
139
+ );
140
140
  }
@@ -1,5 +1,5 @@
1
1
  import error from "./error.mjs";
2
2
 
3
3
  export default function errorLong(pResults, pOptions) {
4
- return error(pResults, { ...pOptions, long: true });
4
+ return error(pResults, { ...pOptions, long: true });
5
5
  }