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
@@ -17,7 +17,7 @@ import { filenameMatchesPattern } from "#graph-utl/match-facade.mjs";
17
17
  * @returns {string}
18
18
  */
19
19
  function hash(pString) {
20
- return createHash("sha1").update(pString).digest("base64");
20
+ return createHash("sha1").update(pString).digest("base64");
21
21
  }
22
22
 
23
23
  /**
@@ -25,11 +25,11 @@ function hash(pString) {
25
25
  * @returns {string}
26
26
  */
27
27
  function _getFileHashSync(pFileName) {
28
- try {
29
- return hash(readFileSync(pFileName, "utf8"));
30
- } catch (pError) {
31
- return "file not found";
32
- }
28
+ try {
29
+ return hash(readFileSync(pFileName, "utf8"));
30
+ } catch (pError) {
31
+ return "file not found";
32
+ }
33
33
  }
34
34
 
35
35
  export const getFileHashSync = memoize(_getFileHashSync);
@@ -39,10 +39,10 @@ export const getFileHashSync = memoize(_getFileHashSync);
39
39
  * @return {IRevisionChange}
40
40
  */
41
41
  export function addCheckSumToChangeSync(pChange) {
42
- return {
43
- ...pChange,
44
- checksum: getFileHashSync(pChange.name),
45
- };
42
+ return {
43
+ ...pChange,
44
+ checksum: getFileHashSync(pChange.name),
45
+ };
46
46
  }
47
47
 
48
48
  /**
@@ -50,12 +50,12 @@ export function addCheckSumToChangeSync(pChange) {
50
50
  * @returns {(pFileName: string) => boolean}
51
51
  */
52
52
  export function excludeFilter(pExcludeOption) {
53
- return (pFileName) => {
54
- if (pExcludeOption.path) {
55
- return !filenameMatchesPattern(pFileName, pExcludeOption.path);
56
- }
57
- return true;
58
- };
53
+ return (pFileName) => {
54
+ if (pExcludeOption.path) {
55
+ return !filenameMatchesPattern(pFileName, pExcludeOption.path);
56
+ }
57
+ return true;
58
+ };
59
59
  }
60
60
 
61
61
  /**
@@ -63,19 +63,19 @@ export function excludeFilter(pExcludeOption) {
63
63
  * @returns {(pFileName: string) => boolean}
64
64
  */
65
65
  export function includeOnlyFilter(pIncludeOnlyFilter) {
66
- return (pFileName) => {
67
- if (pIncludeOnlyFilter) {
68
- return filenameMatchesPattern(pFileName, pIncludeOnlyFilter.path);
69
- }
70
- return true;
71
- };
66
+ return (pFileName) => {
67
+ if (pIncludeOnlyFilter) {
68
+ return filenameMatchesPattern(pFileName, pIncludeOnlyFilter.path);
69
+ }
70
+ return true;
71
+ };
72
72
  }
73
73
  /**
74
74
  * @param {Set<string>} pExtensions
75
75
  * @returns {(pFileName: string) => boolean}
76
76
  */
77
77
  export function hasInterestingExtension(pExtensions) {
78
- return (pFileName) => pExtensions.has(extname(pFileName));
78
+ return (pFileName) => pExtensions.has(extname(pFileName));
79
79
  }
80
80
 
81
81
  /**
@@ -83,26 +83,26 @@ export function hasInterestingExtension(pExtensions) {
83
83
  * @returns {(pChange: IChange) => boolean}
84
84
  */
85
85
  export function changeHasInterestingExtension(pExtensions) {
86
- return (pChange) => {
87
- const lNameHasInterestingExtension = hasInterestingExtension(pExtensions)(
88
- pChange.name,
89
- );
90
- const lOldNameHasInterestingExtension = Boolean(
91
- pChange.oldName && hasInterestingExtension(pExtensions)(pChange.oldName),
92
- );
93
- return lNameHasInterestingExtension || lOldNameHasInterestingExtension;
94
- };
86
+ return (pChange) => {
87
+ const lNameHasInterestingExtension = hasInterestingExtension(pExtensions)(
88
+ pChange.name,
89
+ );
90
+ const lOldNameHasInterestingExtension = Boolean(
91
+ pChange.oldName && hasInterestingExtension(pExtensions)(pChange.oldName),
92
+ );
93
+ return lNameHasInterestingExtension || lOldNameHasInterestingExtension;
94
+ };
95
95
  }
96
96
 
97
97
  // skipping: "pairing broken", "unmodified", "type changed", "ignored"
98
98
  const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
99
- "added",
100
- "copied",
101
- "deleted",
102
- "modified",
103
- "renamed",
104
- "unmerged",
105
- "untracked",
99
+ "added",
100
+ "copied",
101
+ "deleted",
102
+ "modified",
103
+ "renamed",
104
+ "unmerged",
105
+ "untracked",
106
106
  ]);
107
107
 
108
108
  /**
@@ -110,10 +110,10 @@ const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
110
110
  * @returns {(pChange: IChange) => boolean}
111
111
  */
112
112
  export function isInterestingChangeType(pInterestingChangeTypes) {
113
- return (pChange) =>
114
- (pInterestingChangeTypes ?? DEFAULT_INTERESTING_CHANGE_TYPES).has(
115
- pChange.type,
116
- );
113
+ return (pChange) =>
114
+ (pInterestingChangeTypes ?? DEFAULT_INTERESTING_CHANGE_TYPES).has(
115
+ pChange.type,
116
+ );
117
117
  }
118
118
 
119
119
  /**
@@ -121,13 +121,13 @@ export function isInterestingChangeType(pInterestingChangeTypes) {
121
121
  * @returns {boolean}
122
122
  */
123
123
  export function moduleIsInterestingForDiff(pModule) {
124
- return (
125
- !pModule.consolidated &&
126
- !pModule.coreModule &&
127
- !pModule.couldNotResolve &&
128
- !pModule.matchesDoNotFollow &&
129
- // as followable is optional, !exists when the module _is_ followable
130
- // explicit comparison with false
131
- pModule.followable !== false
132
- );
124
+ return (
125
+ !pModule.consolidated &&
126
+ !pModule.coreModule &&
127
+ !pModule.couldNotResolve &&
128
+ !pModule.matchesDoNotFollow &&
129
+ // as followable is optional, !exists when the module _is_ followable
130
+ // explicit comparison with false
131
+ pModule.followable !== false
132
+ );
133
133
  }
@@ -3,11 +3,11 @@
3
3
  import { isDeepStrictEqual } from "node:util";
4
4
  import { getSHA, list } from "watskeburt";
5
5
  import {
6
- isInterestingChangeType,
7
- addCheckSumToChangeSync,
8
- excludeFilter,
9
- includeOnlyFilter,
10
- changeHasInterestingExtension,
6
+ isInterestingChangeType,
7
+ addCheckSumToChangeSync,
8
+ excludeFilter,
9
+ includeOnlyFilter,
10
+ changeHasInterestingExtension,
11
11
  } from "./helpers.mjs";
12
12
  import { bus } from "#utl/bus.mjs";
13
13
 
@@ -18,84 +18,84 @@ import { bus } from "#utl/bus.mjs";
18
18
  */
19
19
 
20
20
  export default class MetaDataStrategy {
21
- /**
22
- * @param {string} _pDirectory
23
- * @param {ICruiseResult} _pCachedCruiseResult
24
- * @param {Object} pOptions
25
- * @param {Set<string>} pOptions.extensions
26
- * @param {Set<changeType>=} pOptions.interestingChangeTypes
27
- * @param {typeof getSHA=} pOptions.shaRetrievalFn
28
- * @param {typeof list=} pOptions.diffListFn
29
- * @param {typeof addCheckSumToChangeSync=} pOptions.checksumFn
30
- * @returns {Promise<IRevisionData>}
31
- */
32
- async getRevisionData(
33
- _pDirectory,
34
- _pCachedCruiseResult,
35
- pCruiseOptions,
36
- pOptions,
37
- ) {
38
- const lOptions = {
39
- shaRetrievalFn: getSHA,
40
- diffListFn: list,
41
- checksumFn: addCheckSumToChangeSync,
42
- ...pOptions,
43
- };
44
- try {
45
- bus.debug("cache: - get sha");
46
- const lSHA = await lOptions.shaRetrievalFn();
47
- bus.debug("cache: - get diff");
48
- const lDiff = /** @type {IChange[]} */ (
49
- await lOptions.diffListFn({ oldRevision: lSHA })
50
- );
51
- const lChanges = lDiff
52
- .filter(({ name }) => excludeFilter(pCruiseOptions.exclude)(name))
53
- .filter(({ name }) =>
54
- includeOnlyFilter(pCruiseOptions.includeOnly)(name),
55
- )
56
- .filter(changeHasInterestingExtension(lOptions.extensions))
57
- .filter(isInterestingChangeType(lOptions.interestingChangeTypes));
58
- bus.debug("cache: - sha-sum diff");
59
- return {
60
- SHA1: lSHA,
61
- changes: lChanges.map(lOptions.checksumFn),
62
- };
63
- } catch (pError) {
64
- throw new Error(
65
- `The --cache option works in concert with git - and it seems either the current folder isn't version managed or git isn't installed. Error:${`\n\n ${pError}\n`}`,
66
- );
67
- }
68
- }
21
+ /**
22
+ * @param {string} _pDirectory
23
+ * @param {ICruiseResult} _pCachedCruiseResult
24
+ * @param {Object} pOptions
25
+ * @param {Set<string>} pOptions.extensions
26
+ * @param {Set<changeType>=} pOptions.interestingChangeTypes
27
+ * @param {typeof getSHA=} pOptions.shaRetrievalFn
28
+ * @param {typeof list=} pOptions.diffListFn
29
+ * @param {typeof addCheckSumToChangeSync=} pOptions.checksumFn
30
+ * @returns {Promise<IRevisionData>}
31
+ */
32
+ async getRevisionData(
33
+ _pDirectory,
34
+ _pCachedCruiseResult,
35
+ pCruiseOptions,
36
+ pOptions,
37
+ ) {
38
+ const lOptions = {
39
+ shaRetrievalFn: getSHA,
40
+ diffListFn: list,
41
+ checksumFn: addCheckSumToChangeSync,
42
+ ...pOptions,
43
+ };
44
+ try {
45
+ bus.debug("cache: - get sha");
46
+ const lSHA = await lOptions.shaRetrievalFn();
47
+ bus.debug("cache: - get diff");
48
+ const lDiff = /** @type {IChange[]} */ (
49
+ await lOptions.diffListFn({ oldRevision: lSHA })
50
+ );
51
+ const lChanges = lDiff
52
+ .filter(({ name }) => excludeFilter(pCruiseOptions.exclude)(name))
53
+ .filter(({ name }) =>
54
+ includeOnlyFilter(pCruiseOptions.includeOnly)(name),
55
+ )
56
+ .filter(changeHasInterestingExtension(lOptions.extensions))
57
+ .filter(isInterestingChangeType(lOptions.interestingChangeTypes));
58
+ bus.debug("cache: - sha-sum diff");
59
+ return {
60
+ SHA1: lSHA,
61
+ changes: lChanges.map(lOptions.checksumFn),
62
+ };
63
+ } catch (pError) {
64
+ throw new Error(
65
+ `The --cache option works in concert with git - and it seems either the current folder isn't version managed or git isn't installed. Error:${`\n\n ${pError}\n`}`,
66
+ );
67
+ }
68
+ }
69
69
 
70
- /**
71
- * @param {IRevisionData=} pExistingRevisionData
72
- * @param {IRevisionData=} pNewRevisionData
73
- * @returns {boolean}
74
- */
75
- revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
76
- return (
77
- Boolean(pExistingRevisionData) &&
78
- Boolean(pNewRevisionData) &&
79
- // @ts-expect-error ts(18048) - tsc complains pExistingRevisionData &
80
- // pNewRevisionData can be undefined, but it should probably get a course
81
- // in reading typescript as we've just checked this.
82
- pExistingRevisionData.SHA1 === pNewRevisionData.SHA1 &&
83
- // @ts-expect-error ts(18048)
84
- isDeepStrictEqual(pExistingRevisionData.changes, pNewRevisionData.changes)
85
- );
86
- }
70
+ /**
71
+ * @param {IRevisionData=} pExistingRevisionData
72
+ * @param {IRevisionData=} pNewRevisionData
73
+ * @returns {boolean}
74
+ */
75
+ revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
76
+ return (
77
+ Boolean(pExistingRevisionData) &&
78
+ Boolean(pNewRevisionData) &&
79
+ // @ts-expect-error ts(18048) - tsc complains pExistingRevisionData &
80
+ // pNewRevisionData can be undefined, but it should probably get a course
81
+ // in reading typescript as we've just checked this.
82
+ pExistingRevisionData.SHA1 === pNewRevisionData.SHA1 &&
83
+ // @ts-expect-error ts(18048)
84
+ isDeepStrictEqual(pExistingRevisionData.changes, pNewRevisionData.changes)
85
+ );
86
+ }
87
87
 
88
- /**
89
- * @param {ICruiseResult} pCruiseResult
90
- * @param {IRevisionData=} pRevisionData
91
- * @returns {ICruiseResult}
92
- */
93
- prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
94
- return pRevisionData
95
- ? {
96
- ...pCruiseResult,
97
- revisionData: pRevisionData,
98
- }
99
- : pCruiseResult;
100
- }
88
+ /**
89
+ * @param {ICruiseResult} pCruiseResult
90
+ * @param {IRevisionData=} pRevisionData
91
+ * @returns {ICruiseResult}
92
+ */
93
+ prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
94
+ return pRevisionData
95
+ ? {
96
+ ...pCruiseResult,
97
+ revisionData: pRevisionData,
98
+ }
99
+ : pCruiseResult;
100
+ }
101
101
  }
@@ -5,89 +5,36 @@ import { isDeepStrictEqual } from "node:util";
5
5
  * @import { IStrictCruiseOptions } from "../../types/strict-options.mjs"
6
6
  */
7
7
 
8
- /*
9
- # command line options
10
- ## No influence on cache
11
- -i, --info
12
- -V, --version
13
- -h, --help
14
- -T, --output-type <type> unless counting implicit shizzle like dependents, metrics calculation
15
- -f, --output-to <file>
16
- -p, --progress [type]
17
- -P, --prefix <prefix>
18
- -C, --cache [cache-location]
19
- --init [oneshot]
20
-
21
-
22
- ## Influence on cache
23
- ### 100% invalidate when different
24
- -c, --config [file]
25
- --ignore-known [file]
26
- --ts-config [file]
27
- --webpack-config [file]
28
- --ts-pre-compilation-deps
29
- -v, --validate [file]
30
- --preserve-symlinks
31
-
32
- ### Invalidates when in cache, not in command
33
- (or more precise: when filters in cache yield a subset of command)
34
- -I, --include-only <regex>
35
- -F, --focus <regex>
36
- -R, --reaches <regex>
37
- -x, --exclude <regex>
38
- -X, --do-not-follow <regex>
39
- -S, --collapse <regex>
40
- -d, --max-depth <n> (more precise: when cache.max-depth < command.max-depth OR cache.max-depth === 0)
41
- -M, --module-systems <items> (more precise: )
42
-
43
- ### Invalidates when not in cache, but in command
44
- -m, --metrics
45
-
46
- # options that are not available on the command line
47
-
48
- ## no influence on cache
49
- - Anything in reporterOptions
50
- - externalModuleResolutionStrategy (as it's not really used anymore IIRC)
51
- -
52
-
53
- ## influence on cache
54
-
55
- - combinedDependencies
56
- - enhancedResolveOptions
57
- - exoticRequireStrings
58
- - knownViolations
59
- */
60
-
61
8
  export function includeOnlyIsCompatible(pExistingFilter, pNewFilter) {
62
- return (
63
- !pExistingFilter || isDeepStrictEqual({ path: pExistingFilter }, pNewFilter)
64
- );
9
+ return (
10
+ !pExistingFilter || isDeepStrictEqual({ path: pExistingFilter }, pNewFilter)
11
+ );
65
12
  }
66
13
 
67
14
  export function filterOptionIsCompatible(pExistingOption, pNewOption) {
68
- return !pExistingOption || isDeepStrictEqual(pExistingOption, pNewOption);
15
+ return !pExistingOption || isDeepStrictEqual(pExistingOption, pNewOption);
69
16
  }
70
17
 
71
18
  export function optionIsCompatible(pExistingOption, pNewOption) {
72
- return isDeepStrictEqual(pExistingOption, pNewOption);
19
+ return isDeepStrictEqual(pExistingOption, pNewOption);
73
20
  }
74
21
 
75
22
  export function limitIsCompatible(pExistingLimit, pNewLimit) {
76
- return !pExistingLimit || pExistingLimit >= (pNewLimit || pExistingLimit + 1);
23
+ return !pExistingLimit || pExistingLimit >= (pNewLimit || pExistingLimit + 1);
77
24
  }
78
25
 
79
26
  export function metricsIsCompatible(pExistingMetrics, pNewMetrics) {
80
- return pExistingMetrics || pExistingMetrics === pNewMetrics;
27
+ return pExistingMetrics || pExistingMetrics === pNewMetrics;
81
28
  }
82
29
 
83
30
  export function cacheOptionIsCompatible(pExistingCacheOption, pNewCacheOption) {
84
- if (!pExistingCacheOption || !pNewCacheOption) {
85
- return false;
86
- }
87
- return (
88
- pExistingCacheOption === pNewCacheOption ||
89
- isDeepStrictEqual(pExistingCacheOption, pNewCacheOption)
90
- );
31
+ if (!pExistingCacheOption || !pNewCacheOption) {
32
+ return false;
33
+ }
34
+ return (
35
+ pExistingCacheOption === pNewCacheOption ||
36
+ isDeepStrictEqual(pExistingCacheOption, pNewCacheOption)
37
+ );
91
38
  }
92
39
 
93
40
  /**
@@ -98,46 +45,46 @@ export function cacheOptionIsCompatible(pExistingCacheOption, pNewCacheOption) {
98
45
  */
99
46
  // eslint-disable-next-line complexity
100
47
  export function optionsAreCompatible(pOldOptions, pNewOptions) {
101
- return (
102
- pOldOptions.args === pNewOptions.args &&
103
- pOldOptions.rulesFile === pNewOptions.rulesFile &&
104
- pOldOptions.tsPreCompilationDeps === pNewOptions.tsPreCompilationDeps &&
105
- pOldOptions.preserveSymlinks === pNewOptions.preserveSymlinks &&
106
- pOldOptions.combinedDependencies === pNewOptions.combinedDependencies &&
107
- pOldOptions.experimentalStats === pNewOptions.experimentalStats &&
108
- pOldOptions.detectJSDocImports === pNewOptions.detectJSDocImports &&
109
- pOldOptions.detectProcessBuiltinModuleCalls ===
110
- pNewOptions.detectProcessBuiltinModuleCalls &&
111
- pOldOptions.skipAnalysisNotInRules === pNewOptions.skipAnalysisNotInRules &&
112
- metricsIsCompatible(pOldOptions.metrics, pNewOptions.metrics) &&
113
- // includeOnly suffers from a backwards compatibility disease
114
- includeOnlyIsCompatible(pOldOptions.includeOnly, pNewOptions.includeOnly) &&
115
- filterOptionIsCompatible(
116
- pOldOptions.doNotFollow,
117
- pNewOptions.doNotFollow,
118
- ) &&
119
- filterOptionIsCompatible(
120
- pOldOptions.moduleSystems,
121
- pNewOptions.moduleSystems,
122
- ) &&
123
- filterOptionIsCompatible(pOldOptions.exclude, pNewOptions.exclude) &&
124
- filterOptionIsCompatible(pOldOptions.focus, pNewOptions.focus) &&
125
- filterOptionIsCompatible(pOldOptions.reaches, pNewOptions.reaches) &&
126
- filterOptionIsCompatible(pOldOptions.highlight, pNewOptions.highlight) &&
127
- filterOptionIsCompatible(pOldOptions.collapse, pNewOptions.collapse) &&
128
- limitIsCompatible(pOldOptions.maxDepth, pNewOptions.maxDepth) &&
129
- optionIsCompatible(
130
- pOldOptions.knownViolations || [],
131
- pNewOptions.knownViolations || [],
132
- ) &&
133
- optionIsCompatible(
134
- pOldOptions.enhancedResolveOptions,
135
- pNewOptions.enhancedResolveOptions,
136
- ) &&
137
- optionIsCompatible(
138
- pOldOptions.exoticRequireStrings,
139
- pNewOptions.exoticRequireStrings,
140
- ) &&
141
- cacheOptionIsCompatible(pOldOptions.cache, pNewOptions.cache)
142
- );
48
+ return (
49
+ pOldOptions.args === pNewOptions.args &&
50
+ pOldOptions.rulesFile === pNewOptions.rulesFile &&
51
+ pOldOptions.tsPreCompilationDeps === pNewOptions.tsPreCompilationDeps &&
52
+ pOldOptions.preserveSymlinks === pNewOptions.preserveSymlinks &&
53
+ pOldOptions.combinedDependencies === pNewOptions.combinedDependencies &&
54
+ pOldOptions.experimentalStats === pNewOptions.experimentalStats &&
55
+ pOldOptions.detectJSDocImports === pNewOptions.detectJSDocImports &&
56
+ pOldOptions.detectProcessBuiltinModuleCalls ===
57
+ pNewOptions.detectProcessBuiltinModuleCalls &&
58
+ pOldOptions.skipAnalysisNotInRules === pNewOptions.skipAnalysisNotInRules &&
59
+ metricsIsCompatible(pOldOptions.metrics, pNewOptions.metrics) &&
60
+ // includeOnly suffers from a backwards compatibility disease
61
+ includeOnlyIsCompatible(pOldOptions.includeOnly, pNewOptions.includeOnly) &&
62
+ filterOptionIsCompatible(
63
+ pOldOptions.doNotFollow,
64
+ pNewOptions.doNotFollow,
65
+ ) &&
66
+ filterOptionIsCompatible(
67
+ pOldOptions.moduleSystems,
68
+ pNewOptions.moduleSystems,
69
+ ) &&
70
+ filterOptionIsCompatible(pOldOptions.exclude, pNewOptions.exclude) &&
71
+ filterOptionIsCompatible(pOldOptions.focus, pNewOptions.focus) &&
72
+ filterOptionIsCompatible(pOldOptions.reaches, pNewOptions.reaches) &&
73
+ filterOptionIsCompatible(pOldOptions.highlight, pNewOptions.highlight) &&
74
+ filterOptionIsCompatible(pOldOptions.collapse, pNewOptions.collapse) &&
75
+ limitIsCompatible(pOldOptions.maxDepth, pNewOptions.maxDepth) &&
76
+ optionIsCompatible(
77
+ pOldOptions.knownViolations || [],
78
+ pNewOptions.knownViolations || [],
79
+ ) &&
80
+ optionIsCompatible(
81
+ pOldOptions.enhancedResolveOptions,
82
+ pNewOptions.enhancedResolveOptions,
83
+ ) &&
84
+ optionIsCompatible(
85
+ pOldOptions.exoticRequireStrings,
86
+ pNewOptions.exoticRequireStrings,
87
+ ) &&
88
+ cacheOptionIsCompatible(pOldOptions.cache, pNewOptions.cache)
89
+ );
143
90
  }
@@ -2,17 +2,17 @@ import satisfies from "semver/functions/satisfies.js";
2
2
  import meta from "#meta.cjs";
3
3
 
4
4
  export default function assertNodeEnvironmentSuitable(pNodeVersion) {
5
- // not using default parameter here because the check should run
6
- // run on node 4 as well
7
- const lNodeVersion = pNodeVersion || process.versions.node;
8
- const lVersionError = `\nERROR: Your node version (${lNodeVersion}) is not supported. dependency-cruiser
5
+ // not using default parameter here because the check should run
6
+ // run on node 4 as well
7
+ const lNodeVersion = pNodeVersion || process.versions.node;
8
+ const lVersionError = `\nERROR: Your node version (${lNodeVersion}) is not supported. dependency-cruiser
9
9
  follows the node.js release cycle and runs on these node versions:
10
10
  ${meta.engines.node}
11
11
  See https://nodejs.org/en/about/releases/ for details.
12
12
 
13
13
  `;
14
14
 
15
- if (!satisfies(lNodeVersion, meta.engines.node)) {
16
- throw new Error(lVersionError);
17
- }
15
+ if (!satisfies(lNodeVersion, meta.engines.node)) {
16
+ throw new Error(lVersionError);
17
+ }
18
18
  }
@@ -1,12 +1,12 @@
1
1
  export const OLD_DEFAULT_RULES_FILE_NAME = ".dependency-cruiser.json";
2
2
  export const RULES_FILE_NAME_SEARCH_ARRAY = [
3
- ".dependency-cruiser.json",
4
- ".dependency-cruiser.js",
5
- ".dependency-cruiser.cjs",
6
- ".dependency-cruiser.mjs",
3
+ ".dependency-cruiser.json",
4
+ ".dependency-cruiser.js",
5
+ ".dependency-cruiser.cjs",
6
+ ".dependency-cruiser.mjs",
7
7
  ];
8
8
  export const DEFAULT_BASELINE_FILE_NAME =
9
- ".dependency-cruiser-known-violations.json";
9
+ ".dependency-cruiser-known-violations.json";
10
10
  export const DEFAULT_CONFIG_FILE_NAME = ".dependency-cruiser.js";
11
11
  export const WEBPACK_CONFIG = "webpack.config.js";
12
12
  export const TYPESCRIPT_CONFIG = "tsconfig.json";
@@ -5,7 +5,7 @@ import { getAvailableTranspilers, allExtensions } from "#main/index.mjs";
5
5
  import meta from "#meta.cjs";
6
6
 
7
7
  function bool2Symbol(pBool) {
8
- return pBool ? styleText("green", "✔") : styleText("red", "x");
8
+ return pBool ? styleText("green", "✔") : styleText("red", "x");
9
9
  }
10
10
 
11
11
  const MAX_VERSION_RANGE_STRING_LENGTH = 19;
@@ -13,30 +13,30 @@ const MAX_TRANSPILER_NAME_LENGTH = 22;
13
13
  const MAX_VERSION_STRING_LENGTH = 24;
14
14
 
15
15
  function formatTranspilers() {
16
- let lTranspilerTableHeader = styleText(
17
- "bold",
18
- ` ✔ ${"transpiler".padEnd(MAX_TRANSPILER_NAME_LENGTH)} ${"versions supported".padEnd(MAX_VERSION_RANGE_STRING_LENGTH)} version found`,
19
- );
20
- let lTranspilerTableDivider = ` - ${"-".repeat(MAX_TRANSPILER_NAME_LENGTH)} ${"-".repeat(MAX_VERSION_RANGE_STRING_LENGTH)} ${"-".repeat(MAX_VERSION_STRING_LENGTH)}`;
21
- let lTranspilerTable = getAvailableTranspilers()
22
- .map(
23
- (pTranspiler) =>
24
- ` ${bool2Symbol(pTranspiler.available)} ${pTranspiler.name.padEnd(MAX_TRANSPILER_NAME_LENGTH)} ${pTranspiler.version.padEnd(MAX_VERSION_RANGE_STRING_LENGTH)} ${pTranspiler.currentVersion}`,
25
- )
26
- .join("\n");
27
- return `${lTranspilerTableHeader}\n${lTranspilerTableDivider}\n${lTranspilerTable}\n`;
16
+ let lTranspilerTableHeader = styleText(
17
+ "bold",
18
+ ` ✔ ${"transpiler".padEnd(MAX_TRANSPILER_NAME_LENGTH)} ${"versions supported".padEnd(MAX_VERSION_RANGE_STRING_LENGTH)} version found`,
19
+ );
20
+ let lTranspilerTableDivider = ` - ${"-".repeat(MAX_TRANSPILER_NAME_LENGTH)} ${"-".repeat(MAX_VERSION_RANGE_STRING_LENGTH)} ${"-".repeat(MAX_VERSION_STRING_LENGTH)}`;
21
+ let lTranspilerTable = getAvailableTranspilers()
22
+ .map(
23
+ (pTranspiler) =>
24
+ ` ${bool2Symbol(pTranspiler.available)} ${pTranspiler.name.padEnd(MAX_TRANSPILER_NAME_LENGTH)} ${pTranspiler.version.padEnd(MAX_VERSION_RANGE_STRING_LENGTH)} ${pTranspiler.currentVersion}`,
25
+ )
26
+ .join("\n");
27
+ return `${lTranspilerTableHeader}\n${lTranspilerTableDivider}\n${lTranspilerTable}\n`;
28
28
  }
29
29
 
30
30
  function formatExtensions(pExtensions) {
31
- return pExtensions.reduce(
32
- (pAll, pThis) =>
33
- `${pAll} ${bool2Symbol(pThis.available)} ${pThis.extension}\n`,
34
- "",
35
- );
31
+ return pExtensions.reduce(
32
+ (pAll, pThis) =>
33
+ `${pAll} ${bool2Symbol(pThis.available)} ${pThis.extension}\n`,
34
+ "",
35
+ );
36
36
  }
37
37
 
38
38
  export default function formatMetaInfo() {
39
- return `
39
+ return `
40
40
  ${styleText("bold", "dependency-cruiser")}@${meta.version}
41
41
 
42
42
  node version supported : ${meta.engines.node}
@@ -44,9 +44,9 @@ export default function formatMetaInfo() {
44
44
  os version found : ${arch()} ${platform()}@${release()}
45
45
 
46
46
  If you need a supported, but not enabled transpiler ('${styleText(
47
- "red",
48
- "x",
49
- )}' below), just install
47
+ "red",
48
+ "x",
49
+ )}' below), just install
50
50
  it in the same folder dependency-cruiser is installed. E.g. 'npm i livescript'
51
51
  will enable livescript support if it's installed in your project folder.
52
52