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
@@ -10,91 +10,91 @@ const MODULE_SYSTEM_LIST_RE = /^(?:(?:cjs|amd|es6|tsd)(?:,|$)){1,4}/gi;
10
10
  const VALID_DEPTH_RE = /^\d{1,2}$/g;
11
11
 
12
12
  function isObject(pObject) {
13
- return (
14
- typeof pObject === "object" && !Array.isArray(pObject) && pObject !== null
15
- );
13
+ return (
14
+ typeof pObject === "object" && !Array.isArray(pObject) && pObject !== null
15
+ );
16
16
  }
17
17
  function deepMerge(pTarget, pSource) {
18
- const lOutput = structuredClone(pTarget);
19
-
20
- for (const lKey in pSource) {
21
- if (isObject(pSource[lKey])) {
22
- if (lKey in pTarget) {
23
- lOutput[lKey] = deepMerge(pTarget[lKey], pSource[lKey]);
24
- } else {
25
- Object.assign(lOutput, { [lKey]: pSource[lKey] });
26
- }
27
- } else {
28
- Object.assign(lOutput, { [lKey]: pSource[lKey] });
29
- }
30
- }
31
-
32
- return lOutput;
18
+ const lOutput = structuredClone(pTarget);
19
+
20
+ for (const lKey in pSource) {
21
+ if (isObject(pSource[lKey])) {
22
+ if (lKey in pTarget) {
23
+ lOutput[lKey] = deepMerge(pTarget[lKey], pSource[lKey]);
24
+ } else {
25
+ Object.assign(lOutput, { [lKey]: pSource[lKey] });
26
+ }
27
+ } else {
28
+ Object.assign(lOutput, { [lKey]: pSource[lKey] });
29
+ }
30
+ }
31
+
32
+ return lOutput;
33
33
  }
34
34
 
35
35
  function assertModuleSystemsValid(pModuleSystems) {
36
- if (
37
- pModuleSystems &&
38
- Array.isArray(pModuleSystems) &&
39
- !pModuleSystems.every((pModuleSystem) =>
40
- pModuleSystem.match(MODULE_SYSTEM_LIST_RE),
41
- )
42
- ) {
43
- throw new Error(
44
- `Invalid module system list: '${pModuleSystems.join(", ")}'\n`,
45
- );
46
- }
36
+ if (
37
+ pModuleSystems &&
38
+ Array.isArray(pModuleSystems) &&
39
+ !pModuleSystems.every((pModuleSystem) =>
40
+ pModuleSystem.match(MODULE_SYSTEM_LIST_RE),
41
+ )
42
+ ) {
43
+ throw new Error(
44
+ `Invalid module system list: '${pModuleSystems.join(", ")}'\n`,
45
+ );
46
+ }
47
47
  }
48
48
 
49
49
  function assertRegExpSafety(pPattern) {
50
- if (pPattern && !safeRegex(pPattern)) {
51
- throw new Error(
52
- `The pattern '${pPattern}' will probably run very slowly - cowardly refusing to run.\n`,
53
- );
54
- }
50
+ if (pPattern && !safeRegex(pPattern)) {
51
+ throw new Error(
52
+ `The pattern '${pPattern}' will probably run very slowly - cowardly refusing to run.\n`,
53
+ );
54
+ }
55
55
  }
56
56
 
57
57
  function assertOutputTypeValid(pOutputType) {
58
- if (
59
- pOutputType &&
60
- !getAvailableReporters().includes(pOutputType) &&
61
- !pOutputType.startsWith("plugin:")
62
- ) {
63
- throw new Error(`'${pOutputType}' is not a valid output type.\n`);
64
- }
58
+ if (
59
+ pOutputType &&
60
+ !getAvailableReporters().includes(pOutputType) &&
61
+ !pOutputType.startsWith("plugin:")
62
+ ) {
63
+ throw new Error(`'${pOutputType}' is not a valid output type.\n`);
64
+ }
65
65
  }
66
66
 
67
67
  function assertMaxDepthValid(pDepth) {
68
- if (pDepth && !pDepth.toString().match(VALID_DEPTH_RE)) {
69
- throw new Error(
70
- `'${pDepth}' is not a valid depth - use an integer between 0 and 99`,
71
- );
72
- }
68
+ if (pDepth && !pDepth.toString().match(VALID_DEPTH_RE)) {
69
+ throw new Error(
70
+ `'${pDepth}' is not a valid depth - use an integer between 0 and 99`,
71
+ );
72
+ }
73
73
  }
74
74
 
75
75
  function assertFocusDepthValid(pFocusDepth) {
76
- const lFocusDepth = Number.parseInt(pFocusDepth, 10);
77
- const lMaxFocusDepth = 99;
78
-
79
- if (
80
- pFocusDepth &&
81
- (Number.isNaN(lFocusDepth) ||
82
- lFocusDepth < 0 ||
83
- lFocusDepth > lMaxFocusDepth)
84
- ) {
85
- throw new Error(
86
- `'${pFocusDepth}' is not a valid focus depth - use an integer between 0 and ${lMaxFocusDepth}`,
87
- );
88
- }
76
+ const lFocusDepth = Number.parseInt(pFocusDepth, 10);
77
+ const lMaxFocusDepth = 99;
78
+
79
+ if (
80
+ pFocusDepth &&
81
+ (Number.isNaN(lFocusDepth) ||
82
+ lFocusDepth < 0 ||
83
+ lFocusDepth > lMaxFocusDepth)
84
+ ) {
85
+ throw new Error(
86
+ `'${pFocusDepth}' is not a valid focus depth - use an integer between 0 and ${lMaxFocusDepth}`,
87
+ );
88
+ }
89
89
  }
90
90
 
91
91
  function assertPathsSafety(pFilterOption) {
92
- if (typeof pFilterOption === "string") {
93
- assertRegExpSafety(pFilterOption);
94
- }
92
+ if (typeof pFilterOption === "string") {
93
+ assertRegExpSafety(pFilterOption);
94
+ }
95
95
 
96
- assertRegExpSafety(pFilterOption?.path ?? "");
97
- assertRegExpSafety(pFilterOption?.pathNot ?? "");
96
+ assertRegExpSafety(pFilterOption?.path ?? "");
97
+ assertRegExpSafety(pFilterOption?.pathNot ?? "");
98
98
  }
99
99
 
100
100
  /**
@@ -103,35 +103,35 @@ function assertPathsSafety(pFilterOption) {
103
103
  * @returns {ICruiseOptions}
104
104
  */
105
105
  export function assertCruiseOptionsValid(pOptions) {
106
- let lReturnValue = {};
107
-
108
- if (pOptions) {
109
- // necessary because can slip through the cracks when passed as a cli parameter
110
- assertModuleSystemsValid(pOptions.moduleSystems);
111
-
112
- // necessary because this safety check can't be done in json schema (a.f.a.i.k.)
113
- assertPathsSafety(pOptions.doNotFollow);
114
- assertPathsSafety(pOptions.exclude);
115
- assertRegExpSafety(pOptions.includeOnly);
116
- assertRegExpSafety(pOptions.focus);
117
- assertRegExpSafety(pOptions.reaches);
118
- assertRegExpSafety(pOptions.highlight);
119
- assertRegExpSafety(pOptions.collapse);
120
-
121
- // necessary because not in the config schema
122
- assertOutputTypeValid(pOptions.outputType);
123
-
124
- // necessary because not found a way to do this properly in JSON schema
125
- assertMaxDepthValid(pOptions.maxDepth);
126
-
127
- assertFocusDepthValid(pOptions.focusDepth);
128
-
129
- if (pOptions?.ruleSet?.options) {
130
- lReturnValue = assertCruiseOptionsValid(pOptions.ruleSet.options);
131
- }
132
- return deepMerge(lReturnValue, pOptions);
133
- }
134
- return lReturnValue;
106
+ let lReturnValue = {};
107
+
108
+ if (pOptions) {
109
+ // necessary because can slip through the cracks when passed as a cli parameter
110
+ assertModuleSystemsValid(pOptions.moduleSystems);
111
+
112
+ // necessary because this safety check can't be done in json schema (a.f.a.i.k.)
113
+ assertPathsSafety(pOptions.doNotFollow);
114
+ assertPathsSafety(pOptions.exclude);
115
+ assertRegExpSafety(pOptions.includeOnly);
116
+ assertRegExpSafety(pOptions.focus);
117
+ assertRegExpSafety(pOptions.reaches);
118
+ assertRegExpSafety(pOptions.highlight);
119
+ assertRegExpSafety(pOptions.collapse);
120
+
121
+ // necessary because not in the config schema
122
+ assertOutputTypeValid(pOptions.outputType);
123
+
124
+ // necessary because not found a way to do this properly in JSON schema
125
+ assertMaxDepthValid(pOptions.maxDepth);
126
+
127
+ assertFocusDepthValid(pOptions.focusDepth);
128
+
129
+ if (pOptions?.ruleSet?.options) {
130
+ lReturnValue = assertCruiseOptionsValid(pOptions.ruleSet.options);
131
+ }
132
+ return deepMerge(lReturnValue, pOptions);
133
+ }
134
+ return lReturnValue;
135
135
  }
136
136
 
137
137
  /**
@@ -140,11 +140,11 @@ export function assertCruiseOptionsValid(pOptions) {
140
140
  * @throws {Error}
141
141
  */
142
142
  export function assertFormatOptionsValid(pFormatOptions) {
143
- assertPathsSafety(pFormatOptions.exclude);
144
- assertPathsSafety(pFormatOptions.focus);
145
- assertPathsSafety(pFormatOptions.reaches);
146
- assertPathsSafety(pFormatOptions.includeOnly);
147
- assertRegExpSafety(pFormatOptions.collapse);
148
- assertOutputTypeValid(pFormatOptions.outputType);
149
- assertFocusDepthValid(pFormatOptions.focusDepth);
143
+ assertPathsSafety(pFormatOptions.exclude);
144
+ assertPathsSafety(pFormatOptions.focus);
145
+ assertPathsSafety(pFormatOptions.reaches);
146
+ assertPathsSafety(pFormatOptions.includeOnly);
147
+ assertRegExpSafety(pFormatOptions.collapse);
148
+ assertOutputTypeValid(pFormatOptions.outputType);
149
+ assertFocusDepthValid(pFormatOptions.focusDepth);
150
150
  }
@@ -1,14 +1,14 @@
1
1
  /** @type {import('../../../types/strict-options').IStrictCruiseOptions} */
2
2
  export default {
3
- validate: false,
4
- maxDepth: 0,
5
- moduleSystems: ["es6", "cjs", "tsd", "amd"],
6
- detectJSDocImports: false,
7
- detectProcessBuiltinModuleCalls: false,
8
- skipAnalysisNotInRules: false,
9
- tsPreCompilationDeps: false,
10
- preserveSymlinks: false,
11
- combinedDependencies: false,
12
- externalModuleResolutionStrategy: "node_modules",
13
- exoticRequireStrings: [],
3
+ validate: false,
4
+ maxDepth: 0,
5
+ moduleSystems: ["es6", "cjs", "tsd", "amd"],
6
+ detectJSDocImports: false,
7
+ detectProcessBuiltinModuleCalls: false,
8
+ skipAnalysisNotInRules: false,
9
+ tsPreCompilationDeps: false,
10
+ preserveSymlinks: false,
11
+ combinedDependencies: false,
12
+ externalModuleResolutionStrategy: "node_modules",
13
+ exoticRequireStrings: [],
14
14
  };
@@ -15,76 +15,76 @@ const DEFAULT_CACHE_FOLDER = "node_modules/.cache/dependency-cruiser";
15
15
  const DEFAULT_CACHE_STRATEGY = "metadata";
16
16
 
17
17
  function normalizeFilterOption(pFilterOption) {
18
- let lReturnValue = pFilterOption || {};
19
-
20
- if (typeof lReturnValue === "string" || Array.isArray(lReturnValue)) {
21
- lReturnValue = {
22
- path: lReturnValue,
23
- };
24
- }
25
- return normalizeREProperties(lReturnValue, ["path"]);
18
+ let lReturnValue = pFilterOption || {};
19
+
20
+ if (typeof lReturnValue === "string" || Array.isArray(lReturnValue)) {
21
+ lReturnValue = {
22
+ path: lReturnValue,
23
+ };
24
+ }
25
+ return normalizeREProperties(lReturnValue, ["path"]);
26
26
  }
27
27
 
28
28
  function normalizeReporterOptions(pReporterOptions) {
29
- const lNormalizeableOptions = [
30
- "archi.collapsePattern",
31
- "archi.filters.includeOnly.path",
32
- "archi.filters.focus.path",
33
- "archi.filters.exclude.path",
34
- "dot.collapsePattern",
35
- "dot.filters.includeOnly.path",
36
- "dot.filters.focus.path",
37
- "dot.filters.exclude.path",
38
- "ddot.collapsePattern",
39
- "ddot.filters.includeOnly.path",
40
- "ddot.filters.focus.path",
41
- "ddot.filters.exclude.path",
42
- ];
43
-
44
- return normalizeREProperties(pReporterOptions, lNormalizeableOptions);
29
+ const lNormalizeableOptions = [
30
+ "archi.collapsePattern",
31
+ "archi.filters.includeOnly.path",
32
+ "archi.filters.focus.path",
33
+ "archi.filters.exclude.path",
34
+ "dot.collapsePattern",
35
+ "dot.filters.includeOnly.path",
36
+ "dot.filters.focus.path",
37
+ "dot.filters.exclude.path",
38
+ "ddot.collapsePattern",
39
+ "ddot.filters.includeOnly.path",
40
+ "ddot.filters.focus.path",
41
+ "ddot.filters.exclude.path",
42
+ ];
43
+
44
+ return normalizeREProperties(pReporterOptions, lNormalizeableOptions);
45
45
  }
46
46
 
47
47
  function normalizeFilterOptions(pOptions, pFilterOptionKeys) {
48
- let lReturnValue = { ...pOptions };
49
-
50
- for (let lFilterOptionKey of pFilterOptionKeys) {
51
- if (pOptions[lFilterOptionKey]) {
52
- lReturnValue[lFilterOptionKey] = normalizeFilterOption(
53
- lReturnValue[lFilterOptionKey],
54
- );
55
- }
56
- }
57
- return lReturnValue;
48
+ let lReturnValue = { ...pOptions };
49
+
50
+ for (const lFilterOptionKey of pFilterOptionKeys) {
51
+ if (pOptions[lFilterOptionKey]) {
52
+ lReturnValue[lFilterOptionKey] = normalizeFilterOption(
53
+ lReturnValue[lFilterOptionKey],
54
+ );
55
+ }
56
+ }
57
+ return lReturnValue;
58
58
  }
59
59
 
60
60
  function normalizeCollapse(pCollapse) {
61
- let lReturnValue = pCollapse;
62
- const lOneOrMoreNonSlashes = "[^/]+";
63
- const lFolderPattern = `${lOneOrMoreNonSlashes}/`;
64
- const lFolderBelowNodeModules = `node_modules/${lOneOrMoreNonSlashes}`;
65
- const lSingleDigitRe = /^\d$/;
66
-
67
- if (typeof pCollapse === "number" || pCollapse.match(lSingleDigitRe)) {
68
- lReturnValue = `${lFolderBelowNodeModules}|^${lFolderPattern.repeat(
69
- Number.parseInt(pCollapse, 10),
70
- )}`;
71
- }
72
- return lReturnValue;
61
+ let lReturnValue = pCollapse;
62
+ const lOneOrMoreNonSlashes = "[^/]+";
63
+ const lFolderPattern = `${lOneOrMoreNonSlashes}/`;
64
+ const lFolderBelowNodeModules = `node_modules/${lOneOrMoreNonSlashes}`;
65
+ const lSingleDigitRe = /^\d$/;
66
+
67
+ if (typeof pCollapse === "number" || pCollapse.match(lSingleDigitRe)) {
68
+ lReturnValue = `${lFolderBelowNodeModules}|^${lFolderPattern.repeat(
69
+ Number.parseInt(pCollapse, 10),
70
+ )}`;
71
+ }
72
+ return lReturnValue;
73
73
  }
74
74
 
75
75
  function normalizeFocusDepth(pFormatOptions) {
76
- /** @type {IFormatOptions}*/
77
- let lFormatOptions = structuredClone(pFormatOptions);
78
- if (Object.hasOwn(lFormatOptions, "focusDepth")) {
79
- if (lFormatOptions?.focus) {
80
- lFormatOptions.focus.depth = Number.parseInt(
81
- lFormatOptions.focusDepth,
82
- 10,
83
- );
84
- }
85
- delete lFormatOptions.focusDepth;
86
- }
87
- return lFormatOptions;
76
+ /** @type {IFormatOptions}*/
77
+ let lFormatOptions = structuredClone(pFormatOptions);
78
+ if (Object.hasOwn(lFormatOptions, "focusDepth")) {
79
+ if (lFormatOptions?.focus) {
80
+ lFormatOptions.focus.depth = Number.parseInt(
81
+ lFormatOptions.focusDepth,
82
+ 10,
83
+ );
84
+ }
85
+ delete lFormatOptions.focusDepth;
86
+ }
87
+ return lFormatOptions;
88
88
  }
89
89
 
90
90
  /**
@@ -93,13 +93,13 @@ function normalizeFocusDepth(pFormatOptions) {
93
93
  * @returns {boolean}
94
94
  */
95
95
  function hasMetricsRule(pRule) {
96
- // TODO: philosophy: is a rule with 'folder' in it a metrics rule?
97
- // Or is it a misuse to ensure folder derivations (like cycles) get
98
- // kicked off?
99
- return (
100
- Object.hasOwn(pRule?.to ?? {}, "moreUnstable") ||
101
- (pRule?.scope ?? "module") === "folder"
102
- );
96
+ // TODO: philosophy: is a rule with 'folder' in it a metrics rule?
97
+ // Or is it a misuse to ensure folder derivations (like cycles) get
98
+ // kicked off?
99
+ return (
100
+ Object.hasOwn(pRule?.to ?? {}, "moreUnstable") ||
101
+ (pRule?.scope ?? "module") === "folder"
102
+ );
103
103
  }
104
104
 
105
105
  /**
@@ -108,11 +108,11 @@ function hasMetricsRule(pRule) {
108
108
  * @returns {boolean}
109
109
  */
110
110
  function ruleSetHasMetricsRule(pRuleSet) {
111
- const lRuleSet = pRuleSet || {};
112
- return (
113
- (lRuleSet.forbidden || []).some(hasMetricsRule) ||
114
- (lRuleSet.allowed || []).some(hasMetricsRule)
115
- );
111
+ const lRuleSet = pRuleSet || {};
112
+ return (
113
+ (lRuleSet.forbidden || []).some(hasMetricsRule) ||
114
+ (lRuleSet.allowed || []).some(hasMetricsRule)
115
+ );
116
116
  }
117
117
 
118
118
  /**
@@ -121,10 +121,10 @@ function ruleSetHasMetricsRule(pRuleSet) {
121
121
  * @returns Boolean
122
122
  */
123
123
  function reporterShowsMetrics(pOptions) {
124
- return (
125
- (pOptions.reporterOptions?.[pOptions?.outputType]?.showMetrics ?? false) ===
126
- true
127
- );
124
+ return (
125
+ (pOptions.reporterOptions?.[pOptions?.outputType]?.showMetrics ?? false) ===
126
+ true
127
+ );
128
128
  }
129
129
 
130
130
  /**
@@ -134,12 +134,12 @@ function reporterShowsMetrics(pOptions) {
134
134
  * @returns Boolean
135
135
  */
136
136
  function shouldCalculateMetrics(pOptions) {
137
- return (
138
- pOptions.metrics ||
139
- pOptions.outputType === "metrics" ||
140
- reporterShowsMetrics(pOptions) ||
141
- ruleSetHasMetricsRule(pOptions.ruleSet)
142
- );
137
+ return (
138
+ pOptions.metrics ||
139
+ pOptions.outputType === "metrics" ||
140
+ reporterShowsMetrics(pOptions) ||
141
+ ruleSetHasMetricsRule(pOptions.ruleSet)
142
+ );
143
143
  }
144
144
 
145
145
  /**
@@ -147,26 +147,26 @@ function shouldCalculateMetrics(pOptions) {
147
147
  * @returns {ICacheOptions}
148
148
  */
149
149
  function normalizeCacheOptions(pCacheOptions) {
150
- let lNormalizedCacheOptions = pCacheOptions;
151
-
152
- if (typeof pCacheOptions === "string") {
153
- lNormalizedCacheOptions = {
154
- folder: pCacheOptions,
155
- };
156
- }
157
-
158
- if (pCacheOptions === true) {
159
- lNormalizedCacheOptions = {};
160
- }
161
-
162
- // TODO: put these values in a central spot as constants
163
- // (folder is already in src/cli/defaults.js but depending on the UI (cli)
164
- // is not OK. We might b.t.w. wanna deduplicate the defaulting)
165
- return {
166
- folder: DEFAULT_CACHE_FOLDER,
167
- strategy: DEFAULT_CACHE_STRATEGY,
168
- ...lNormalizedCacheOptions,
169
- };
150
+ let lNormalizedCacheOptions = pCacheOptions;
151
+
152
+ if (typeof pCacheOptions === "string") {
153
+ lNormalizedCacheOptions = {
154
+ folder: pCacheOptions,
155
+ };
156
+ }
157
+
158
+ if (pCacheOptions === true) {
159
+ lNormalizedCacheOptions = {};
160
+ }
161
+
162
+ // TODO: put these values in a central spot as constants
163
+ // (folder is already in src/cli/defaults.js but depending on the UI (cli)
164
+ // is not OK. We might b.t.w. wanna deduplicate the defaulting)
165
+ return {
166
+ folder: DEFAULT_CACHE_FOLDER,
167
+ strategy: DEFAULT_CACHE_STRATEGY,
168
+ ...lNormalizedCacheOptions,
169
+ };
170
170
  }
171
171
 
172
172
  /**
@@ -176,54 +176,52 @@ function normalizeCacheOptions(pCacheOptions) {
176
176
  * @returns {IStrictCruiseOptions}
177
177
  */
178
178
  export function normalizeCruiseOptions(pOptions, pFileAndDirectoryArray = []) {
179
- /** @type {IStrictCruiseOptions} */
180
- let lReturnValue = {
181
- baseDir: process.cwd(),
182
- ...defaults,
183
- ...pOptions,
184
- args: pFileAndDirectoryArray.join(" "),
185
- };
186
-
187
- // @ts-expect-error the idea of normalizing maxDepth to number is that after
188
- // that we're sure it's a number. Should maybe best be solved by
189
- // having two types/ interfaces
190
- lReturnValue.maxDepth = Number.parseInt(lReturnValue.maxDepth, 10);
191
- lReturnValue.moduleSystems = uniq(lReturnValue.moduleSystems);
192
- if (Object.hasOwn(lReturnValue, "collapse")) {
193
- lReturnValue.collapse = normalizeCollapse(lReturnValue.collapse);
194
- }
195
- // TODO: further down the execution path code still relies on .doNotFollow
196
- // and .exclude existing. We should treat them the same as the
197
- // other filters (so either make all exist always or only
198
- // when they're actually defined)
199
- lReturnValue.doNotFollow = normalizeFilterOption(lReturnValue.doNotFollow);
200
- lReturnValue.exclude = normalizeFilterOption(lReturnValue.exclude);
201
- lReturnValue.extraExtensionsToScan = lReturnValue.extraExtensionsToScan || [];
202
- lReturnValue = normalizeFilterOptions(lReturnValue, [
203
- "focus",
204
- "includeOnly",
205
- "reaches",
206
- "highlight",
207
- ]);
208
-
209
- lReturnValue.exoticRequireStrings = uniq(lReturnValue.exoticRequireStrings);
210
- if (lReturnValue.reporterOptions) {
211
- lReturnValue.reporterOptions = normalizeReporterOptions(
212
- lReturnValue.reporterOptions,
213
- );
214
- }
215
- lReturnValue.metrics = shouldCalculateMetrics(pOptions);
216
- // if (has(pOptions, "ruleSet")) {
217
- // lReturnValue.ruleSet = normalizeRuleSet(pOptions.ruleSet);
218
- // }
219
- if (lReturnValue.cache) {
220
- lReturnValue.cache = normalizeCacheOptions(lReturnValue.cache);
221
- }
222
- if (lReturnValue.detectJSDocImports) {
223
- lReturnValue.parser = "tsc";
224
- }
225
-
226
- return normalizeFocusDepth(lReturnValue);
179
+ /** @type {IStrictCruiseOptions} */
180
+ let lReturnValue = {
181
+ baseDir: process.cwd(),
182
+ ...defaults,
183
+ ...pOptions,
184
+ args: pFileAndDirectoryArray.join(" "),
185
+ };
186
+
187
+ // @ts-expect-error the idea of normalizing maxDepth to number is that after
188
+ // that we're sure it's a number. Should maybe best be solved by
189
+ // having two types/ interfaces
190
+ lReturnValue.maxDepth = Number.parseInt(lReturnValue.maxDepth, 10);
191
+ lReturnValue.moduleSystems = uniq(lReturnValue.moduleSystems);
192
+ if (Object.hasOwn(lReturnValue, "collapse")) {
193
+ lReturnValue.collapse = normalizeCollapse(lReturnValue.collapse);
194
+ }
195
+ // TODO: further down the execution path code still relies on .doNotFollow
196
+ // and .exclude existing. We should treat them the same as the
197
+ // other filters (so either make all exist always or only
198
+ // when they're actually defined)
199
+ lReturnValue.doNotFollow = normalizeFilterOption(lReturnValue.doNotFollow);
200
+ lReturnValue.exclude = normalizeFilterOption(lReturnValue.exclude);
201
+ lReturnValue.extraExtensionsToScan = lReturnValue.extraExtensionsToScan || [];
202
+ lReturnValue = normalizeFilterOptions(lReturnValue, [
203
+ "focus",
204
+ "includeOnly",
205
+ "reaches",
206
+ "highlight",
207
+ ]);
208
+
209
+ lReturnValue.exoticRequireStrings = uniq(lReturnValue.exoticRequireStrings);
210
+ if (lReturnValue.reporterOptions) {
211
+ lReturnValue.reporterOptions = normalizeReporterOptions(
212
+ lReturnValue.reporterOptions,
213
+ );
214
+ }
215
+ lReturnValue.metrics = shouldCalculateMetrics(pOptions);
216
+
217
+ if (lReturnValue.cache) {
218
+ lReturnValue.cache = normalizeCacheOptions(lReturnValue.cache);
219
+ }
220
+ if (lReturnValue.detectJSDocImports) {
221
+ lReturnValue.parser = "tsc";
222
+ }
223
+
224
+ return normalizeFocusDepth(lReturnValue);
227
225
  }
228
226
 
229
227
  /**
@@ -231,19 +229,19 @@ export function normalizeCruiseOptions(pOptions, pFileAndDirectoryArray = []) {
231
229
  * @returns {IStrictFormatOptions}
232
230
  */
233
231
  export function normalizeFormatOptions(pFormatOptions) {
234
- let lFormatOptions = structuredClone(pFormatOptions);
232
+ let lFormatOptions = structuredClone(pFormatOptions);
235
233
 
236
- if (Object.hasOwn(lFormatOptions, "collapse")) {
237
- lFormatOptions.collapse = normalizeCollapse(lFormatOptions.collapse);
238
- }
234
+ if (Object.hasOwn(lFormatOptions, "collapse")) {
235
+ lFormatOptions.collapse = normalizeCollapse(lFormatOptions.collapse);
236
+ }
239
237
 
240
- lFormatOptions = normalizeFilterOptions(lFormatOptions, [
241
- "exclude",
242
- "focus",
243
- "highlight",
244
- "includeOnly",
245
- "reaches",
246
- ]);
238
+ lFormatOptions = normalizeFilterOptions(lFormatOptions, [
239
+ "exclude",
240
+ "focus",
241
+ "highlight",
242
+ "includeOnly",
243
+ "reaches",
244
+ ]);
247
245
 
248
- return normalizeFocusDepth(lFormatOptions);
246
+ return normalizeFocusDepth(lFormatOptions);
249
247
  }