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
@@ -13,27 +13,27 @@ import { formatNumber, formatPercentage } from "./utl/index.mjs";
13
13
  const METRIC_WIDTH = 5;
14
14
 
15
15
  function getMetricsFromFolder({
16
- name,
17
- moduleCount,
18
- afferentCouplings,
19
- efferentCouplings,
20
- instability,
21
- experimentalStats,
16
+ name,
17
+ moduleCount,
18
+ afferentCouplings,
19
+ efferentCouplings,
20
+ instability,
21
+ experimentalStats,
22
22
  }) {
23
- const lReturnValue = {
24
- type: "folder",
25
- name,
26
- moduleCount,
27
- afferentCouplings,
28
- efferentCouplings,
29
- instability,
30
- };
31
- if (experimentalStats) {
32
- lReturnValue.size = experimentalStats.size;
33
- lReturnValue.topLevelStatementCount =
34
- experimentalStats.topLevelStatementCount;
35
- }
36
- return lReturnValue;
23
+ const lReturnValue = {
24
+ type: "folder",
25
+ name,
26
+ moduleCount,
27
+ afferentCouplings,
28
+ efferentCouplings,
29
+ instability,
30
+ };
31
+ if (experimentalStats) {
32
+ lReturnValue.size = experimentalStats.size;
33
+ lReturnValue.topLevelStatementCount =
34
+ experimentalStats.topLevelStatementCount;
35
+ }
36
+ return lReturnValue;
37
37
  }
38
38
 
39
39
  /**
@@ -42,36 +42,36 @@ function getMetricsFromFolder({
42
42
  * @returns
43
43
  */
44
44
  function getMetricsFromModule({
45
- source,
46
- dependents,
47
- dependencies,
48
- instability,
49
- experimentalStats,
45
+ source,
46
+ dependents,
47
+ dependencies,
48
+ instability,
49
+ experimentalStats,
50
50
  }) {
51
- const lReturnValue = {
52
- type: "module",
53
- name: source,
54
- moduleCount: 1,
55
- afferentCouplings: dependents.length,
56
- efferentCouplings: dependencies.length,
57
- instability,
58
- };
59
- if (experimentalStats) {
60
- lReturnValue.size = experimentalStats.size;
61
- lReturnValue.topLevelStatementCount =
62
- experimentalStats.topLevelStatementCount;
63
- }
64
- return lReturnValue;
51
+ const lReturnValue = {
52
+ type: "module",
53
+ name: source,
54
+ moduleCount: 1,
55
+ afferentCouplings: dependents.length,
56
+ efferentCouplings: dependencies.length,
57
+ instability,
58
+ };
59
+ if (experimentalStats) {
60
+ lReturnValue.size = experimentalStats.size;
61
+ lReturnValue.topLevelStatementCount =
62
+ experimentalStats.topLevelStatementCount;
63
+ }
64
+ return lReturnValue;
65
65
  }
66
66
 
67
67
  function metricsAreCalculable(pModule) {
68
- return Object.hasOwn(pModule, "instability");
68
+ return Object.hasOwn(pModule, "instability");
69
69
  }
70
70
 
71
71
  function componentIsCalculable(pComponent) {
72
- return (
73
- Number.isInteger(pComponent.moduleCount) && pComponent.moduleCount > -1
74
- );
72
+ return (
73
+ Number.isInteger(pComponent.moduleCount) && pComponent.moduleCount > -1
74
+ );
75
75
  }
76
76
 
77
77
  /**
@@ -82,100 +82,100 @@ function componentIsCalculable(pComponent) {
82
82
  */
83
83
  // eslint-disable-next-line max-lines-per-function
84
84
  function transformToTableObject(
85
- { modules, folders },
86
- { smallIntegerWidth, largeIntegerWidth },
85
+ { modules, folders },
86
+ { smallIntegerWidth, largeIntegerWidth },
87
87
  ) {
88
- const lReturnValue = {
89
- meta: new Map([
90
- ["type", { width: 6, title: "type", format: "string" }],
91
- ["name", { width: 0, title: "name", format: "string" }],
92
- [
93
- "moduleCount",
94
- {
95
- width: smallIntegerWidth,
96
- title: "N",
97
- format: "integer",
98
- },
99
- ],
100
- [
101
- "afferentCouplings",
102
- {
103
- width: smallIntegerWidth,
104
- title: "Ca",
105
- format: "integer",
106
- },
107
- ],
108
- [
109
- "efferentCouplings",
110
- {
111
- width: smallIntegerWidth,
112
- title: "Ce",
113
- format: "integer",
114
- },
115
- ],
116
- [
117
- "instability",
118
- {
119
- width: smallIntegerWidth,
120
- title: "I (%)",
121
- format: "percent",
122
- },
123
- ],
124
- [
125
- "size",
126
- {
127
- width: largeIntegerWidth,
128
- title: "size",
129
- format: "integer",
130
- },
131
- ],
132
- [
133
- "topLevelStatementCount",
134
- {
135
- width: smallIntegerWidth,
136
- title: "#tls",
137
- format: "integer",
138
- },
139
- ],
140
- ]),
141
- data: [],
142
- };
143
- lReturnValue.data = folders
144
- .map(getMetricsFromFolder)
145
- .concat(modules.filter(metricsAreCalculable).map(getMetricsFromModule))
146
- .filter(componentIsCalculable);
88
+ const lReturnValue = {
89
+ meta: new Map([
90
+ ["type", { width: 6, title: "type", format: "string" }],
91
+ ["name", { width: 0, title: "name", format: "string" }],
92
+ [
93
+ "moduleCount",
94
+ {
95
+ width: smallIntegerWidth,
96
+ title: "N",
97
+ format: "integer",
98
+ },
99
+ ],
100
+ [
101
+ "afferentCouplings",
102
+ {
103
+ width: smallIntegerWidth,
104
+ title: "Ca",
105
+ format: "integer",
106
+ },
107
+ ],
108
+ [
109
+ "efferentCouplings",
110
+ {
111
+ width: smallIntegerWidth,
112
+ title: "Ce",
113
+ format: "integer",
114
+ },
115
+ ],
116
+ [
117
+ "instability",
118
+ {
119
+ width: smallIntegerWidth,
120
+ title: "I (%)",
121
+ format: "percent",
122
+ },
123
+ ],
124
+ [
125
+ "size",
126
+ {
127
+ width: largeIntegerWidth,
128
+ title: "size",
129
+ format: "integer",
130
+ },
131
+ ],
132
+ [
133
+ "topLevelStatementCount",
134
+ {
135
+ width: smallIntegerWidth,
136
+ title: "#tls",
137
+ format: "integer",
138
+ },
139
+ ],
140
+ ]),
141
+ data: [],
142
+ };
143
+ lReturnValue.data = folders
144
+ .map(getMetricsFromFolder)
145
+ .concat(modules.filter(metricsAreCalculable).map(getMetricsFromModule))
146
+ .filter(componentIsCalculable);
147
147
 
148
- const lMaxNameWidth = lReturnValue.data
149
- .map(({ name }) => name.length)
150
- .concat(lReturnValue.meta.get("name").title.length)
151
- .sort((pLeft, pRight) => pLeft - pRight)
152
- .pop();
153
- lReturnValue.meta.get("name").width = lMaxNameWidth;
148
+ const lMaxNameWidth = lReturnValue.data
149
+ .map(({ name }) => name.length)
150
+ .concat(lReturnValue.meta.get("name").title.length)
151
+ .sort((pLeft, pRight) => pLeft - pRight)
152
+ .pop();
153
+ lReturnValue.meta.get("name").width = lMaxNameWidth;
154
154
 
155
- return lReturnValue;
155
+ return lReturnValue;
156
156
  }
157
157
 
158
158
  function orderByNumber(pAttributeName) {
159
- return (pLeft, pRight) =>
160
- // eslint-disable-next-line security/detect-object-injection
161
- (pRight[pAttributeName] || 0) - (pLeft[pAttributeName] || 0);
159
+ return (pLeft, pRight) =>
160
+ // eslint-disable-next-line security/detect-object-injection
161
+ (pRight[pAttributeName] || 0) - (pLeft[pAttributeName] || 0);
162
162
  }
163
163
 
164
164
  function orderByString(pAttributeName) {
165
- return (pLeft, pRight) =>
166
- // eslint-disable-next-line security/detect-object-injection
167
- pLeft[pAttributeName].localeCompare(pRight[pAttributeName]);
165
+ return (pLeft, pRight) =>
166
+ // eslint-disable-next-line security/detect-object-injection
167
+ pLeft[pAttributeName].localeCompare(pRight[pAttributeName]);
168
168
  }
169
169
  /**
170
170
  * @param {IMeta} pMetaData
171
171
  * @returns {string}
172
172
  */
173
173
  function formatToTextHeader(pMetaData) {
174
- return Array.from(pMetaData.values())
175
- .map(({ title, width, format }) =>
176
- format === "string" ? title.padEnd(width + 1) : title.padStart(width + 1),
177
- )
178
- .join(" ");
174
+ return Array.from(pMetaData.values())
175
+ .map(({ title, width, format }) =>
176
+ format === "string" ? title.padEnd(width + 1) : title.padStart(width + 1),
177
+ )
178
+ .join(" ");
179
179
  }
180
180
 
181
181
  /**
@@ -183,9 +183,9 @@ function formatToTextHeader(pMetaData) {
183
183
  * @returns {string}
184
184
  */
185
185
  function formatToTextDemarcationLine(pMetaData) {
186
- return Array.from(pMetaData.values())
187
- .map(({ width }) => "-".repeat(width + 1))
188
- .join(" ");
186
+ return Array.from(pMetaData.values())
187
+ .map(({ width }) => "-".repeat(width + 1))
188
+ .join(" ");
189
189
  }
190
190
 
191
191
  /**
@@ -194,28 +194,28 @@ function formatToTextDemarcationLine(pMetaData) {
194
194
  * @returns {string}
195
195
  */
196
196
  function formatToTextData(pData, pMetaData) {
197
- return pData
198
- .map((pRow) => {
199
- return Object.keys(pRow)
200
- .map((pKey) => {
201
- const lMeta = pMetaData.get(pKey);
202
- if (lMeta.format === "string") {
203
- // eslint-disable-next-line security/detect-object-injection
204
- return pRow[pKey].padEnd(lMeta.width + 1);
205
- }
206
- if (lMeta.format === "percent") {
207
- // eslint-disable-next-line security/detect-object-injection
208
- return formatPercentage(pRow[pKey]).padStart(lMeta.width + 1);
209
- }
210
- // eslint-disable-next-line security/detect-object-injection
211
- return Number.isInteger(pRow[pKey])
212
- ? // eslint-disable-next-line security/detect-object-injection
213
- formatNumber(pRow[pKey]).padStart(lMeta.width + 1)
214
- : "".padStart(lMeta.width + 1);
215
- })
216
- .join(" ");
217
- })
218
- .join(EOL);
197
+ return pData
198
+ .map((pRow) => {
199
+ return Object.keys(pRow)
200
+ .map((pKey) => {
201
+ const lMeta = pMetaData.get(pKey);
202
+ if (lMeta.format === "string") {
203
+ // eslint-disable-next-line security/detect-object-injection
204
+ return pRow[pKey].padEnd(lMeta.width + 1);
205
+ }
206
+ if (lMeta.format === "percent") {
207
+ // eslint-disable-next-line security/detect-object-injection
208
+ return formatPercentage(pRow[pKey]).padStart(lMeta.width + 1);
209
+ }
210
+ // eslint-disable-next-line security/detect-object-injection
211
+ return Number.isInteger(pRow[pKey])
212
+ ? // eslint-disable-next-line security/detect-object-injection
213
+ formatNumber(pRow[pKey]).padStart(lMeta.width + 1)
214
+ : "".padStart(lMeta.width + 1);
215
+ })
216
+ .join(" ");
217
+ })
218
+ .join(EOL);
219
219
  }
220
220
 
221
221
  /**
@@ -224,11 +224,11 @@ function formatToTextData(pData, pMetaData) {
224
224
  * @returns {string}
225
225
  */
226
226
  function formatToTextTable(pData, pMetaData) {
227
- return [styleText("bold", formatToTextHeader(pMetaData))]
228
- .concat(formatToTextDemarcationLine(pMetaData))
229
- .concat(formatToTextData(pData, pMetaData))
230
- .join(EOL)
231
- .concat(EOL);
227
+ return [styleText("bold", formatToTextHeader(pMetaData))]
228
+ .concat(formatToTextDemarcationLine(pMetaData))
229
+ .concat(formatToTextData(pData, pMetaData))
230
+ .join(EOL)
231
+ .concat(EOL);
232
232
  }
233
233
 
234
234
  /**
@@ -238,26 +238,26 @@ function formatToTextTable(pData, pMetaData) {
238
238
  * @returns {string}
239
239
  */
240
240
  function transformMetricsToTable(
241
- { modules, folders },
242
- { orderBy, hideFolders, hideModules },
241
+ { modules, folders },
242
+ { orderBy, hideFolders, hideModules },
243
243
  ) {
244
- /** @type {ITableObject} */
245
- const lObject = transformToTableObject(
246
- { modules, folders },
247
- {
248
- smallIntegerWidth: METRIC_WIDTH,
249
- largeIntegerWidth: METRIC_WIDTH + METRIC_WIDTH,
250
- },
251
- );
252
- let lComponents = lObject.data
253
- .filter(
254
- (pComponent) =>
255
- (!hideModules && pComponent.type === "module") ||
256
- (!hideFolders && pComponent.type === "folder"),
257
- )
258
- .sort(orderByString("name"))
259
- .sort(orderByNumber(orderBy || "instability"));
260
- return formatToTextTable(lComponents, lObject.meta);
244
+ /** @type {ITableObject} */
245
+ const lObject = transformToTableObject(
246
+ { modules, folders },
247
+ {
248
+ smallIntegerWidth: METRIC_WIDTH,
249
+ largeIntegerWidth: METRIC_WIDTH + METRIC_WIDTH,
250
+ },
251
+ );
252
+ let lComponents = lObject.data
253
+ .filter(
254
+ (pComponent) =>
255
+ (!hideModules && pComponent.type === "module") ||
256
+ (!hideFolders && pComponent.type === "folder"),
257
+ )
258
+ .sort(orderByString("name"))
259
+ .sort(orderByNumber(orderBy || "instability"));
260
+ return formatToTextTable(lComponents, lObject.meta);
261
261
  }
262
262
 
263
263
  /**
@@ -271,18 +271,18 @@ function transformMetricsToTable(
271
271
  * @return {import('../../types/dependency-cruiser.js').IReporterOutput} -
272
272
  */
273
273
  export default function metrics(pCruiseResult, pReporterOptions) {
274
- const lReporterOptions = pReporterOptions || {};
275
- if (pCruiseResult.folders) {
276
- return {
277
- output: transformMetricsToTable(pCruiseResult, lReporterOptions),
278
- exitCode: 0,
279
- };
280
- } else {
281
- return {
282
- output:
283
- `${EOL}ERROR: The cruise result didn't contain any metrics - re-running the cruise with${EOL}` +
284
- ` the '--metrics' command line option should fix that.${EOL}${EOL}`,
285
- exitCode: 1,
286
- };
287
- }
274
+ const lReporterOptions = pReporterOptions || {};
275
+ if (pCruiseResult.folders) {
276
+ return {
277
+ output: transformMetricsToTable(pCruiseResult, lReporterOptions),
278
+ exitCode: 0,
279
+ };
280
+ } else {
281
+ return {
282
+ output:
283
+ `${EOL}ERROR: The cruise result didn't contain any metrics - re-running the cruise with${EOL}` +
284
+ ` the '--metrics' command line option should fix that.${EOL}${EOL}`,
285
+ exitCode: 1,
286
+ };
287
+ }
288
288
  }
@@ -5,8 +5,8 @@
5
5
  * @returns {import("../../types/dependency-cruiser").IReporterOutput}
6
6
  */
7
7
  export default function nullReporter(pResults) {
8
- return {
9
- output: "",
10
- exitCode: pResults.summary.error,
11
- };
8
+ return {
9
+ output: "",
10
+ exitCode: pResults.summary.error,
11
+ };
12
12
  }
@@ -1,53 +1,53 @@
1
1
  export function isValidPlugin(pPluginFunction) {
2
- let lReturnValue = false;
3
- /** @type {import('../../types/dependency-cruiser').ICruiseResult} */
4
- const lMinimalCruiseResult = {
5
- modules: [],
6
- summary: {
7
- error: 0,
8
- info: 0,
9
- warn: 0,
10
- ignore: 0,
11
- totalCruised: 0,
12
- violations: [],
13
- optionsUsed: {},
14
- },
15
- };
2
+ let lReturnValue = false;
3
+ /** @type {import('../../types/dependency-cruiser').ICruiseResult} */
4
+ const lMinimalCruiseResult = {
5
+ modules: [],
6
+ summary: {
7
+ error: 0,
8
+ info: 0,
9
+ warn: 0,
10
+ ignore: 0,
11
+ totalCruised: 0,
12
+ violations: [],
13
+ optionsUsed: {},
14
+ },
15
+ };
16
16
 
17
- if (typeof pPluginFunction === "function") {
18
- const lTestReportOutput = pPluginFunction(lMinimalCruiseResult);
19
- lReturnValue =
20
- Object.hasOwn(lTestReportOutput, "output") &&
21
- Object.hasOwn(lTestReportOutput, "exitCode") &&
22
- typeof lTestReportOutput.exitCode === "number";
23
- }
24
- return lReturnValue;
17
+ if (typeof pPluginFunction === "function") {
18
+ const lTestReportOutput = pPluginFunction(lMinimalCruiseResult);
19
+ lReturnValue =
20
+ Object.hasOwn(lTestReportOutput, "output") &&
21
+ Object.hasOwn(lTestReportOutput, "exitCode") &&
22
+ typeof lTestReportOutput.exitCode === "number";
23
+ }
24
+ return lReturnValue;
25
25
  }
26
26
 
27
27
  async function getPluginReporter(pOutputType) {
28
- let lReturnValue = false;
28
+ let lReturnValue = false;
29
29
 
30
- try {
31
- const lModule = await import(pOutputType);
32
- lReturnValue = lModule.default;
33
- } catch (pError) {
34
- throw new Error(
35
- `Could not find reporter plugin '${pOutputType}' (or it isn't valid)`,
36
- );
37
- }
38
- if (!isValidPlugin(lReturnValue)) {
39
- throw new Error(`${pOutputType} is not a valid plugin`);
40
- }
41
- return lReturnValue;
30
+ try {
31
+ const lModule = await import(pOutputType);
32
+ lReturnValue = lModule.default;
33
+ } catch (pError) {
34
+ throw new Error(
35
+ `Could not find reporter plugin '${pOutputType}' (or it isn't valid)`,
36
+ );
37
+ }
38
+ if (!isValidPlugin(lReturnValue)) {
39
+ throw new Error(`${pOutputType} is not a valid plugin`);
40
+ }
41
+ return lReturnValue;
42
42
  }
43
43
 
44
44
  export function getExternalPluginReporter(pOutputType) {
45
- const lPluginPatternRE = /^plugin:(?<pluginName>.+)$/;
46
- const lPluginMatch = (pOutputType || "").match(lPluginPatternRE);
45
+ const lPluginPatternRE = /^plugin:(?<pluginName>.+)$/;
46
+ const lPluginMatch = (pOutputType || "").match(lPluginPatternRE);
47
47
 
48
- if (lPluginMatch?.groups) {
49
- return getPluginReporter(lPluginMatch.groups.pluginName);
50
- }
48
+ if (lPluginMatch?.groups) {
49
+ return getPluginReporter(lPluginMatch.groups.pluginName);
50
+ }
51
51
 
52
- return false;
52
+ return false;
53
53
  }