dependency-cruiser 17.3.2 → 17.3.3-beta-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/bin/depcruise-baseline.mjs +43 -43
  2. package/bin/depcruise-fmt.mjs +89 -89
  3. package/bin/dependency-cruise.mjs +171 -171
  4. package/configs/plugins/3d-reporter-plugin.mjs +36 -36
  5. package/configs/plugins/stats-reporter-plugin.mjs +51 -51
  6. package/configs/recommended-strict.cjs +5 -5
  7. package/configs/recommended-warn-only.cjs +5 -5
  8. package/configs/recommended.cjs +22 -22
  9. package/configs/rules/no-circular.cjs +10 -10
  10. package/configs/rules/no-deprecated-core.cjs +10 -10
  11. package/configs/rules/no-duplicate-dependency-types.cjs +17 -17
  12. package/configs/rules/no-non-package-json.cjs +11 -11
  13. package/configs/rules/no-orphans.cjs +18 -18
  14. package/configs/rules/not-to-deprecated.cjs +10 -10
  15. package/configs/rules/not-to-unresolvable.cjs +10 -10
  16. package/package.json +170 -170
  17. package/src/cache/cache.mjs +139 -139
  18. package/src/cache/content-strategy.mjs +88 -88
  19. package/src/cache/find-content-changes.mjs +58 -58
  20. package/src/cache/helpers.mjs +52 -52
  21. package/src/cache/metadata-strategy.mjs +83 -83
  22. package/src/cache/options-compatible.mjs +56 -109
  23. package/src/cli/assert-node-environment-suitable.mjs +7 -7
  24. package/src/cli/defaults.mjs +5 -5
  25. package/src/cli/format-meta-info.mjs +22 -22
  26. package/src/cli/format.mjs +28 -28
  27. package/src/cli/index.mjs +145 -145
  28. package/src/cli/init-config/build-config.mjs +94 -94
  29. package/src/cli/init-config/environment-helpers.mjs +77 -77
  30. package/src/cli/init-config/find-extensions.mjs +27 -27
  31. package/src/cli/init-config/get-user-input.mjs +151 -151
  32. package/src/cli/init-config/index.mjs +88 -88
  33. package/src/cli/init-config/normalize-init-options.mjs +47 -47
  34. package/src/cli/init-config/utl.mjs +4 -4
  35. package/src/cli/init-config/validators.mjs +10 -10
  36. package/src/cli/init-config/write-config.mjs +21 -21
  37. package/src/cli/init-config/write-run-scripts-to-manifest.mjs +103 -107
  38. package/src/cli/listeners/cli-feedback.mjs +49 -49
  39. package/src/cli/listeners/ndjson.mjs +66 -66
  40. package/src/cli/listeners/performance-log/format-helpers.mjs +63 -63
  41. package/src/cli/listeners/performance-log/handlers.mjs +56 -56
  42. package/src/cli/listeners/performance-log/index.mjs +37 -37
  43. package/src/cli/normalize-cli-options.mjs +182 -182
  44. package/src/cli/tools/wrap-stream-in-html.mjs +37 -37
  45. package/src/cli/utl/assert-file-existence.mjs +7 -7
  46. package/src/cli/utl/io.mjs +28 -31
  47. package/src/config-utl/extract-babel-config.mjs +69 -69
  48. package/src/config-utl/extract-depcruise-config/index.mjs +54 -54
  49. package/src/config-utl/extract-depcruise-config/merge-configs.mjs +63 -63
  50. package/src/config-utl/extract-depcruise-config/read-config.mjs +9 -9
  51. package/src/config-utl/extract-depcruise-options.mjs +9 -9
  52. package/src/config-utl/extract-known-violations.mjs +49 -49
  53. package/src/config-utl/extract-ts-config.mjs +46 -48
  54. package/src/config-utl/extract-webpack-resolve-config.mjs +88 -88
  55. package/src/config-utl/make-absolute.mjs +5 -5
  56. package/src/enrich/add-validations.mjs +13 -13
  57. package/src/enrich/derive/circular.mjs +49 -49
  58. package/src/enrich/derive/dependents.mjs +27 -27
  59. package/src/enrich/derive/folders/aggregate-to-folders.mjs +104 -104
  60. package/src/enrich/derive/folders/index.mjs +19 -19
  61. package/src/enrich/derive/folders/utl.mjs +18 -18
  62. package/src/enrich/derive/metrics/get-module-metrics.mjs +27 -27
  63. package/src/enrich/derive/metrics/index.mjs +8 -8
  64. package/src/enrich/derive/module-utl.mjs +18 -18
  65. package/src/enrich/derive/orphan/index.mjs +18 -18
  66. package/src/enrich/derive/orphan/is-orphan.mjs +9 -9
  67. package/src/enrich/derive/reachable.mjs +165 -168
  68. package/src/enrich/enrich-modules.mjs +25 -25
  69. package/src/enrich/index.mjs +15 -15
  70. package/src/enrich/soften-known-violations.mjs +90 -90
  71. package/src/enrich/summarize/add-rule-set-used.mjs +13 -13
  72. package/src/enrich/summarize/get-stats.mjs +17 -17
  73. package/src/enrich/summarize/index.mjs +18 -18
  74. package/src/enrich/summarize/is-same-violation.mjs +30 -30
  75. package/src/enrich/summarize/summarize-folders.mjs +35 -35
  76. package/src/enrich/summarize/summarize-modules.mjs +97 -97
  77. package/src/enrich/summarize/summarize-options.mjs +71 -71
  78. package/src/extract/acorn/estree-helpers.mjs +66 -66
  79. package/src/extract/acorn/extract-amd-deps.mjs +63 -64
  80. package/src/extract/acorn/extract-cjs-deps.mjs +83 -83
  81. package/src/extract/acorn/extract-es6-deps.mjs +54 -54
  82. package/src/extract/acorn/extract-stats.mjs +4 -4
  83. package/src/extract/acorn/extract.mjs +28 -28
  84. package/src/extract/acorn/parse.mjs +37 -37
  85. package/src/extract/clear-caches.mjs +7 -7
  86. package/src/extract/extract-dependencies.mjs +109 -109
  87. package/src/extract/extract-stats.mjs +21 -21
  88. package/src/extract/gather-initial-sources.mjs +64 -64
  89. package/src/extract/helpers.mjs +73 -71
  90. package/src/extract/index.mjs +120 -120
  91. package/src/extract/resolve/determine-dependency-types.mjs +166 -169
  92. package/src/extract/resolve/external-module-helpers.mjs +76 -76
  93. package/src/extract/resolve/get-manifest.mjs +79 -79
  94. package/src/extract/resolve/index.mjs +175 -164
  95. package/src/extract/resolve/is-built-in.mjs +22 -24
  96. package/src/extract/resolve/merge-manifests.mjs +43 -43
  97. package/src/extract/resolve/module-classifiers.mjs +229 -229
  98. package/src/extract/resolve/resolve-amd.mjs +44 -44
  99. package/src/extract/resolve/resolve-cjs.mjs +40 -40
  100. package/src/extract/resolve/resolve-helpers.mjs +20 -20
  101. package/src/extract/resolve/resolve.mjs +26 -26
  102. package/src/extract/swc/dependency-visitor.mjs +211 -211
  103. package/src/extract/swc/extract-swc-deps.mjs +4 -4
  104. package/src/extract/swc/extract.mjs +7 -7
  105. package/src/extract/swc/parse.mjs +12 -12
  106. package/src/extract/transpile/babel-wrap.mjs +9 -9
  107. package/src/extract/transpile/coffeescript-wrap.mjs +21 -21
  108. package/src/extract/transpile/index.mjs +47 -47
  109. package/src/extract/transpile/javascript-wrap.mjs +6 -6
  110. package/src/extract/transpile/livescript-wrap.mjs +5 -5
  111. package/src/extract/transpile/meta.mjs +80 -80
  112. package/src/extract/transpile/svelte-preprocess.mjs +73 -73
  113. package/src/extract/transpile/svelte-wrap.mjs +19 -19
  114. package/src/extract/transpile/try-import-available.mjs +26 -27
  115. package/src/extract/transpile/typescript-wrap.mjs +39 -39
  116. package/src/extract/transpile/vue-template-wrap.cjs +43 -43
  117. package/src/extract/tsc/extract-stats.mjs +4 -4
  118. package/src/extract/tsc/extract-typescript-deps.mjs +429 -398
  119. package/src/extract/tsc/extract.mjs +22 -22
  120. package/src/extract/tsc/parse.mjs +21 -21
  121. package/src/graph-utl/add-focus.mjs +35 -35
  122. package/src/graph-utl/compare.mjs +24 -24
  123. package/src/graph-utl/consolidate-module-dependencies.mjs +35 -35
  124. package/src/graph-utl/consolidate-modules.mjs +33 -33
  125. package/src/graph-utl/consolidate-to-folder.mjs +13 -13
  126. package/src/graph-utl/consolidate-to-pattern.mjs +34 -34
  127. package/src/graph-utl/filter-bank.mjs +74 -69
  128. package/src/graph-utl/indexed-module-graph.mjs +227 -225
  129. package/src/graph-utl/match-facade.mjs +3 -3
  130. package/src/graph-utl/rule-set.mjs +20 -20
  131. package/src/graph-utl/strip-self-transitions.mjs +6 -6
  132. package/src/main/cruise.mjs +81 -81
  133. package/src/main/files-and-dirs/normalize.mjs +7 -7
  134. package/src/main/format.mjs +11 -14
  135. package/src/main/helpers.mjs +25 -25
  136. package/src/main/index.mjs +8 -8
  137. package/src/main/options/assert-validity.mjs +100 -100
  138. package/src/main/options/defaults.mjs +11 -11
  139. package/src/main/options/normalize.mjs +158 -160
  140. package/src/main/report-wrap.mjs +37 -37
  141. package/src/main/resolve-options/normalize.mjs +127 -128
  142. package/src/main/rule-set/assert-validity.mjs +67 -73
  143. package/src/main/rule-set/normalize.mjs +81 -79
  144. package/src/meta.cjs +15 -16
  145. package/src/report/anon/anonymize-path-element.mjs +20 -34
  146. package/src/report/anon/anonymize-path.mjs +11 -11
  147. package/src/report/anon/index.mjs +119 -119
  148. package/src/report/anon/random-string.mjs +23 -23
  149. package/src/report/azure-devops.mjs +75 -99
  150. package/src/report/baseline.mjs +9 -9
  151. package/src/report/csv.mjs +13 -13
  152. package/src/report/d2.mjs +105 -105
  153. package/src/report/dot/default-theme.mjs +152 -152
  154. package/src/report/dot/index.mjs +146 -146
  155. package/src/report/dot/module-utl.mjs +72 -72
  156. package/src/report/dot/prepare-custom-level.mjs +20 -20
  157. package/src/report/dot/prepare-flat-level.mjs +11 -11
  158. package/src/report/dot/prepare-folder-level.mjs +12 -13
  159. package/src/report/dot/theming.mjs +73 -73
  160. package/src/report/dot-webpage/dot-module.mjs +36 -36
  161. package/src/report/dot-webpage/svg-in-html-snippets/script.cjs +208 -210
  162. package/src/report/dot-webpage/svg-in-html-snippets/style.css +51 -51
  163. package/src/report/dot-webpage/wrap-in-html.mjs +7 -7
  164. package/src/report/error-html/index.mjs +49 -49
  165. package/src/report/error-html/utl.mjs +99 -99
  166. package/src/report/error-long.mjs +1 -1
  167. package/src/report/error.mjs +93 -93
  168. package/src/report/html/index.mjs +48 -48
  169. package/src/report/identity.mjs +4 -4
  170. package/src/report/index.mjs +33 -33
  171. package/src/report/json.mjs +4 -4
  172. package/src/report/markdown.mjs +120 -120
  173. package/src/report/mermaid.mjs +111 -111
  174. package/src/report/metrics.mjs +185 -185
  175. package/src/report/null.mjs +4 -4
  176. package/src/report/plugins.mjs +41 -41
  177. package/src/report/teamcity.mjs +150 -150
  178. package/src/report/text.mjs +42 -42
  179. package/src/report/utl/dependency-to-incidence-transformer.mjs +32 -32
  180. package/src/report/utl/index.mjs +53 -53
  181. package/src/schema/configuration.validate.mjs +1 -0
  182. package/src/schema/cruise-result.validate.mjs +1 -0
  183. package/src/schema/utl.mjs +6 -0
  184. package/src/utl/array-util.mjs +25 -25
  185. package/src/utl/bus.mjs +12 -12
  186. package/src/utl/extract-root-module-name.cjs +8 -8
  187. package/src/utl/find-all-files.mjs +54 -54
  188. package/src/utl/get-extension.mjs +2 -2
  189. package/src/utl/object-util.mjs +21 -22
  190. package/src/utl/path-to-posix.mjs +5 -5
  191. package/src/utl/regex-util.mjs +20 -20
  192. package/src/utl/try-import.mjs +42 -41
  193. package/src/utl/try-require.cjs +23 -23
  194. package/src/utl/wrap-and-indent.mjs +33 -33
  195. package/src/validate/index.mjs +65 -65
  196. package/src/validate/match-dependency-rule.mjs +47 -47
  197. package/src/validate/match-folder-dependency-rule.mjs +27 -27
  198. package/src/validate/match-module-rule-helpers.mjs +76 -76
  199. package/src/validate/match-module-rule.mjs +12 -12
  200. package/src/validate/matchers.mjs +162 -162
  201. package/src/validate/rule-classifiers.mjs +9 -9
  202. package/src/validate/violates-required-rule.mjs +23 -23
  203. package/types/cache-options.d.mts +27 -27
  204. package/types/config-utl/extract-babel-config.d.mts +1 -1
  205. package/types/config-utl/extract-depcruise-config.d.mts +3 -3
  206. package/types/config-utl/extract-depcruise-options.d.mts +1 -1
  207. package/types/config-utl/extract-ts-config.d.mts +1 -1
  208. package/types/config-utl/extract-webpack-resolve-config.d.mts +3 -3
  209. package/types/configuration.d.mts +10 -10
  210. package/types/cruise-result.d.mts +414 -414
  211. package/types/dependency-cruiser.d.mts +52 -52
  212. package/types/filter-types.d.mts +45 -45
  213. package/types/options.d.mts +430 -430
  214. package/types/plugins/3d-reporter-plugin.d.mts +9 -9
  215. package/types/plugins/mermaid-reporter-plugin.d.mts +10 -10
  216. package/types/plugins/stats-reporter-plugin.d.mts +9 -9
  217. package/types/reporter-options.d.mts +196 -196
  218. package/types/resolve-options.d.mts +23 -23
  219. package/types/restrictions.d.mts +174 -174
  220. package/types/rule-set.d.mts +132 -132
  221. package/types/rule-summary.d.mts +14 -14
  222. package/types/shared-types.d.mts +89 -89
  223. package/types/strict-filter-types.d.mts +52 -52
  224. package/types/strict-options.d.mts +34 -34
  225. package/types/strict-restrictions.d.mts +25 -25
  226. package/types/strict-rule-set.d.mts +36 -36
  227. package/types/violations.d.mts +40 -40
  228. package/src/schema/README.md +0 -5
  229. package/src/schema/baseline-violations.schema.mjs +0 -1
  230. package/src/schema/configuration.schema.mjs +0 -1
  231. package/src/schema/cruise-result.schema.mjs +0 -1
  232. package/types/README.md +0 -1
@@ -1,45 +1,45 @@
1
1
  import { extname } from "node:path";
2
2
 
3
3
  export function dependenciesEqual(pLeftDependency) {
4
- // As we're using this to compare (typescript) pre-compilation dependencies
5
- // with post-compilation dependencies we do not consider the moduleSystem.
6
- //
7
- // In typescript the module system will typically be es6. Compiled down to
8
- // javascript it can be es6, but also cjs (depends on the `module` setting
9
- // in your tsconfig). In the latter case, we're still looking at the same
10
- // dependency even though the module systems differ.
11
- return (pRightDependency) =>
12
- pLeftDependency.module === pRightDependency.module &&
13
- pLeftDependency.dynamic === pRightDependency.dynamic &&
14
- pLeftDependency.exoticRequire === pRightDependency.exoticRequire;
4
+ // As we're using this to compare (typescript) pre-compilation dependencies
5
+ // with post-compilation dependencies we do not consider the moduleSystem.
6
+ //
7
+ // In typescript the module system will typically be es6. Compiled down to
8
+ // javascript it can be es6, but also cjs (depends on the `module` setting
9
+ // in your tsconfig). In the latter case, we're still looking at the same
10
+ // dependency even though the module systems differ.
11
+ return (pRightDependency) =>
12
+ pLeftDependency.module === pRightDependency.module &&
13
+ pLeftDependency.dynamic === pRightDependency.dynamic &&
14
+ pLeftDependency.exoticRequire === pRightDependency.exoticRequire;
15
15
  }
16
16
 
17
17
  export function detectPreCompilationNess(pTSDependencies, pJSDependencies) {
18
- return pTSDependencies.map((pTSDependency) =>
19
- pJSDependencies.some(dependenciesEqual(pTSDependency))
20
- ? { ...pTSDependency, preCompilationOnly: false }
21
- : {
22
- ...pTSDependency,
23
- preCompilationOnly: true,
24
- dependencyTypes: (pTSDependency.dependencyTypes || []).concat(
25
- "pre-compilation-only",
26
- ),
27
- },
28
- );
18
+ return pTSDependencies.map((pTSDependency) =>
19
+ pJSDependencies.some(dependenciesEqual(pTSDependency))
20
+ ? { ...pTSDependency, preCompilationOnly: false }
21
+ : {
22
+ ...pTSDependency,
23
+ preCompilationOnly: true,
24
+ dependencyTypes: (pTSDependency.dependencyTypes || []).concat(
25
+ "pre-compilation-only",
26
+ ),
27
+ },
28
+ );
29
29
  }
30
30
 
31
31
  const PROTOCOL_ONLY_BUILTINS = new Set([
32
- // module.builtinModules.filter(m=>m.startsWith('node:'))
33
- "node:sea",
34
- "node:sqlite",
35
- "node:test",
36
- "node:test/reporters",
37
- // module.builtinModules.filter(m=>m.startsWith('bun:'))
38
- "bun:ffi",
39
- "bun:jsc",
40
- "bun:sqlite",
41
- "bun:test",
42
- "bun:wrap",
32
+ // module.builtinModules.filter(m=>m.startsWith('node:'))
33
+ "node:sea",
34
+ "node:sqlite",
35
+ "node:test",
36
+ "node:test/reporters",
37
+ // module.builtinModules.filter(m=>m.startsWith('bun:'))
38
+ "bun:ffi",
39
+ "bun:jsc",
40
+ "bun:sqlite",
41
+ "bun:test",
42
+ "bun:wrap",
43
43
  ]);
44
44
 
45
45
  /**
@@ -49,14 +49,14 @@ const PROTOCOL_ONLY_BUILTINS = new Set([
49
49
  * @returns {string}
50
50
  */
51
51
  function getCanonicalModuleName(pModuleName, pProtocol) {
52
- const lModuleWithProtocol = pProtocol + pModuleName;
53
- const lIsJsIshProtocol = pProtocol === "node:" || pProtocol === "bun:";
54
- const lIsProtocolOnlyModule = PROTOCOL_ONLY_BUILTINS.has(lModuleWithProtocol);
52
+ const lModuleWithProtocol = pProtocol + pModuleName;
53
+ const lIsJsIshProtocol = pProtocol === "node:" || pProtocol === "bun:";
54
+ const lIsProtocolOnlyModule = PROTOCOL_ONLY_BUILTINS.has(lModuleWithProtocol);
55
55
 
56
- if (!lIsJsIshProtocol || lIsProtocolOnlyModule) {
57
- return lModuleWithProtocol;
58
- }
59
- return pModuleName;
56
+ if (!lIsJsIshProtocol || lIsProtocolOnlyModule) {
57
+ return lModuleWithProtocol;
58
+ }
59
+ return pModuleName;
60
60
  }
61
61
 
62
62
  /**
@@ -75,26 +75,26 @@ function getCanonicalModuleName(pModuleName, pProtocol) {
75
75
  */
76
76
  // eslint-disable-next-line complexity
77
77
  export function extractModuleAttributes(pString) {
78
- let lReturnValue = { module: pString };
79
- const lModuleAttributes = pString.match(
80
- // eslint-disable-next-line security/detect-unsafe-regex
81
- /^(?<protocol>node:|file:|data:|bun:)(?:(?<mimeType>[^,]+),)?(?<module>.+)$/,
82
- );
78
+ let lReturnValue = { module: pString };
79
+ const lModuleAttributes = pString.match(
80
+ // eslint-disable-next-line security/detect-unsafe-regex
81
+ /^(?<protocol>node:|file:|data:|bun:)(?:(?<mimeType>[^,]+),)?(?<module>.+)$/,
82
+ );
83
83
 
84
- if (lModuleAttributes?.groups) {
85
- lReturnValue.module = getCanonicalModuleName(
86
- lModuleAttributes?.groups.module,
87
- lModuleAttributes?.groups.protocol,
88
- );
89
- if (lModuleAttributes?.groups?.protocol) {
90
- lReturnValue.protocol = lModuleAttributes.groups.protocol;
91
- }
92
- if (lModuleAttributes?.groups?.mimeType) {
93
- lReturnValue.mimeType = lModuleAttributes.groups.mimeType;
94
- }
95
- }
84
+ if (lModuleAttributes?.groups) {
85
+ lReturnValue.module = getCanonicalModuleName(
86
+ lModuleAttributes?.groups.module,
87
+ lModuleAttributes?.groups.protocol,
88
+ );
89
+ if (lModuleAttributes?.groups?.protocol) {
90
+ lReturnValue.protocol = lModuleAttributes.groups.protocol;
91
+ }
92
+ if (lModuleAttributes?.groups?.mimeType) {
93
+ lReturnValue.mimeType = lModuleAttributes.groups.mimeType;
94
+ }
95
+ }
96
96
 
97
- return lReturnValue;
97
+ return lReturnValue;
98
98
  }
99
99
 
100
100
  /**
@@ -108,25 +108,27 @@ export function extractModuleAttributes(pString) {
108
108
  * @returns {string} the stripped string
109
109
  */
110
110
  export function stripQueryParameters(pFilenameString) {
111
- // url.parse(pFilenameString).pathname did this quite admirably, but it's
112
- // deprecated, hence this funky RE replace. And accompanying unit test :-/
113
- return pFilenameString.replace(/\?.+$/, "");
111
+ // url.parse(pFilenameString).pathname did this, but it's
112
+ // deprecated, hence this funky RE replace.
113
+ return pFilenameString.replace(/\?.+$/, "");
114
114
  }
115
115
 
116
+ const TS_COMPATIBLE_EXTENSIONS = new Set([
117
+ ".ts",
118
+ ".tsx",
119
+ ".mts",
120
+ ".cts",
121
+ ".js",
122
+ ".mjs",
123
+ ".cjs",
124
+ ".vue",
125
+ ]);
126
+
116
127
  /**
117
128
  * Returns true if the file name has a TypeScript compatible extension
118
129
  * @param {string} pFileName
119
130
  * @returns {boolean}
120
131
  */
121
132
  export function isTypeScriptCompatible(pFileName) {
122
- return [
123
- ".ts",
124
- ".tsx",
125
- ".mts",
126
- ".cts",
127
- ".js",
128
- ".mjs",
129
- ".cjs",
130
- ".vue",
131
- ].includes(extname(pFileName));
133
+ return TS_COMPATIBLE_EXTENSIONS.has(extname(pFileName));
132
134
  }
@@ -11,131 +11,131 @@ import { bus } from "#utl/bus.mjs";
11
11
 
12
12
  /* eslint max-params:0 , max-lines-per-function:0*/
13
13
  function extractRecursive(
14
- pFileName,
15
- pCruiseOptions,
16
- pVisited,
17
- pDepth,
18
- pResolveOptions,
19
- pTranspileOptions,
14
+ pFileName,
15
+ pCruiseOptions,
16
+ pVisited,
17
+ pDepth,
18
+ pResolveOptions,
19
+ pTranspileOptions,
20
20
  ) {
21
- pVisited.add(pFileName);
22
- const lDependencies =
23
- pCruiseOptions.maxDepth <= 0 || pDepth < pCruiseOptions.maxDepth
24
- ? extractDependencies(
25
- pFileName,
26
- pCruiseOptions,
27
- pResolveOptions,
28
- pTranspileOptions,
29
- )
30
- : [];
31
- const lReturnValue = [
32
- {
33
- source: pFileName,
34
- ...(pCruiseOptions.experimentalStats
35
- ? {
36
- experimentalStats: extractStats(
37
- pFileName,
38
- pCruiseOptions,
39
- pTranspileOptions,
40
- ),
41
- }
42
- : {}),
43
- dependencies: lDependencies,
44
- },
45
- ];
21
+ pVisited.add(pFileName);
22
+ const lDependencies =
23
+ pCruiseOptions.maxDepth <= 0 || pDepth < pCruiseOptions.maxDepth
24
+ ? extractDependencies(
25
+ pFileName,
26
+ pCruiseOptions,
27
+ pResolveOptions,
28
+ pTranspileOptions,
29
+ )
30
+ : [];
31
+ const lReturnValue = [
32
+ {
33
+ source: pFileName,
34
+ ...(pCruiseOptions.experimentalStats
35
+ ? {
36
+ experimentalStats: extractStats(
37
+ pFileName,
38
+ pCruiseOptions,
39
+ pTranspileOptions,
40
+ ),
41
+ }
42
+ : {}),
43
+ dependencies: lDependencies,
44
+ },
45
+ ];
46
46
 
47
- // eslint-disable-next-line budapestian/local-variable-pattern
48
- for (const { resolved, followable, matchesDoNotFollow } of lDependencies) {
49
- if (followable && !matchesDoNotFollow && !pVisited.has(resolved)) {
50
- lReturnValue.push(
51
- ...extractRecursive(
52
- resolved,
53
- pCruiseOptions,
54
- pVisited,
55
- pDepth + 1,
56
- pResolveOptions,
57
- pTranspileOptions,
58
- ),
59
- );
60
- }
61
- }
62
- return lReturnValue;
47
+ // eslint-disable-next-line budapestian/local-variable-pattern
48
+ for (const { resolved, followable, matchesDoNotFollow } of lDependencies) {
49
+ if (followable && !matchesDoNotFollow && !pVisited.has(resolved)) {
50
+ lReturnValue.push(
51
+ ...extractRecursive(
52
+ resolved,
53
+ pCruiseOptions,
54
+ pVisited,
55
+ pDepth + 1,
56
+ pResolveOptions,
57
+ pTranspileOptions,
58
+ ),
59
+ );
60
+ }
61
+ }
62
+ return lReturnValue;
63
63
  }
64
64
 
65
65
  function extractFileDirectoryArray(
66
- pFileDirectoryArray,
67
- pCruiseOptions,
68
- pResolveOptions,
69
- pTranspileOptions,
66
+ pFileDirectoryArray,
67
+ pCruiseOptions,
68
+ pResolveOptions,
69
+ pTranspileOptions,
70
70
  ) {
71
- let lVisited = new Set();
71
+ let lVisited = new Set();
72
72
 
73
- bus.info("read files: gather initial sources");
74
- const lInitialSources = gatherInitialSources(
75
- pFileDirectoryArray,
76
- pCruiseOptions,
77
- );
73
+ bus.info("read files: gather initial sources");
74
+ const lInitialSources = gatherInitialSources(
75
+ pFileDirectoryArray,
76
+ pCruiseOptions,
77
+ );
78
78
 
79
- bus.info("read files: visit dependencies");
80
- const lResult = [];
81
- for (const lFilename of lInitialSources) {
82
- if (!lVisited.has(lFilename)) {
83
- lVisited.add(lFilename);
84
- lResult.push(
85
- ...extractRecursive(
86
- lFilename,
87
- pCruiseOptions,
88
- lVisited,
89
- 0,
90
- pResolveOptions,
91
- pTranspileOptions,
92
- ),
93
- );
94
- }
95
- }
96
- return lResult;
79
+ bus.info("read files: visit dependencies");
80
+ const lResult = [];
81
+ for (const lFilename of lInitialSources) {
82
+ if (!lVisited.has(lFilename)) {
83
+ lVisited.add(lFilename);
84
+ lResult.push(
85
+ ...extractRecursive(
86
+ lFilename,
87
+ pCruiseOptions,
88
+ lVisited,
89
+ 0,
90
+ pResolveOptions,
91
+ pTranspileOptions,
92
+ ),
93
+ );
94
+ }
95
+ }
96
+ return lResult;
97
97
  }
98
98
 
99
99
  function isNotFollowable({ followable }) {
100
- return !followable;
100
+ return !followable;
101
101
  }
102
102
 
103
103
  function notInFromListAlready(pFromList) {
104
- return ({ resolved }) => !pFromList.some(({ source }) => source === resolved);
104
+ return ({ resolved }) => !pFromList.some(({ source }) => source === resolved);
105
105
  }
106
106
 
107
107
  function toDependencyToSource(pToListItem) {
108
- return {
109
- source: pToListItem.resolved,
110
- followable: pToListItem.followable,
111
- coreModule: pToListItem.coreModule,
112
- couldNotResolve: pToListItem.couldNotResolve,
113
- matchesDoNotFollow: pToListItem.matchesDoNotFollow,
114
- dependencyTypes: pToListItem.dependencyTypes,
115
- dependencies: [],
116
- };
108
+ return {
109
+ source: pToListItem.resolved,
110
+ followable: pToListItem.followable,
111
+ coreModule: pToListItem.coreModule,
112
+ couldNotResolve: pToListItem.couldNotResolve,
113
+ matchesDoNotFollow: pToListItem.matchesDoNotFollow,
114
+ dependencyTypes: pToListItem.dependencyTypes,
115
+ dependencies: [],
116
+ };
117
117
  }
118
118
 
119
119
  function complete(pAll, pFromListItem) {
120
- return pAll
121
- .concat(pFromListItem)
122
- .concat(
123
- pFromListItem.dependencies
124
- .filter(isNotFollowable)
125
- .filter(notInFromListAlready(pAll))
126
- .map(toDependencyToSource),
127
- );
120
+ return pAll
121
+ .concat(pFromListItem)
122
+ .concat(
123
+ pFromListItem.dependencies
124
+ .filter(isNotFollowable)
125
+ .filter(notInFromListAlready(pAll))
126
+ .map(toDependencyToSource),
127
+ );
128
128
  }
129
129
 
130
130
  function filterExcludedDynamicDependencies(pModule, pExclude) {
131
- // no need to do the 'path' thing as that was addressed in extractFileDirectoryArray already
132
- return {
133
- ...pModule,
134
- dependencies: pModule.dependencies.filter(
135
- ({ dynamic }) =>
136
- !Object.hasOwn(pExclude, "dynamic") || pExclude.dynamic !== dynamic,
137
- ),
138
- };
131
+ // no need to do the 'path' thing as that was addressed in extractFileDirectoryArray already
132
+ return {
133
+ ...pModule,
134
+ dependencies: pModule.dependencies.filter(
135
+ ({ dynamic }) =>
136
+ !Object.hasOwn(pExclude, "dynamic") || pExclude.dynamic !== dynamic,
137
+ ),
138
+ };
139
139
  }
140
140
 
141
141
  /**
@@ -149,24 +149,24 @@ function filterExcludedDynamicDependencies(pModule, pExclude) {
149
149
  * @returns {Partial<IModule[]>}
150
150
  */
151
151
  export default function extract(
152
- pFileDirectoryArray,
153
- pCruiseOptions,
154
- pResolveOptions,
155
- pTranspileOptions,
152
+ pFileDirectoryArray,
153
+ pCruiseOptions,
154
+ pResolveOptions,
155
+ pTranspileOptions,
156
156
  ) {
157
- clearCaches();
157
+ clearCaches();
158
158
 
159
- const lReturnValue = extractFileDirectoryArray(
160
- pFileDirectoryArray,
161
- pCruiseOptions,
162
- pResolveOptions,
163
- pTranspileOptions,
164
- )
165
- .reduce(complete, [])
166
- .map((pModule) =>
167
- filterExcludedDynamicDependencies(pModule, pCruiseOptions.exclude),
168
- );
169
- pResolveOptions.fileSystem.purge();
170
- clearCaches();
171
- return lReturnValue;
159
+ const lReturnValue = extractFileDirectoryArray(
160
+ pFileDirectoryArray,
161
+ pCruiseOptions,
162
+ pResolveOptions,
163
+ pTranspileOptions,
164
+ )
165
+ .reduce(complete, [])
166
+ .map((pModule) =>
167
+ filterExcludedDynamicDependencies(pModule, pCruiseOptions.exclude),
168
+ );
169
+ pResolveOptions.fileSystem.purge();
170
+ clearCaches();
171
+ return lReturnValue;
172
172
  }