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
@@ -11,7 +11,7 @@ import configTemplate from "./config-template.mjs";
11
11
  * @returns {string}
12
12
  */
13
13
  function quote(pString) {
14
- return `"${pString}"`;
14
+ return `"${pString}"`;
15
15
  }
16
16
 
17
17
  /**
@@ -19,10 +19,10 @@ function quote(pString) {
19
19
  * @returns {string}
20
20
  */
21
21
  function extensionsToString(pExtensions) {
22
- if (pExtensions) {
23
- return `[${pExtensions.map(quote).join(", ")}]`;
24
- }
25
- return "";
22
+ if (pExtensions) {
23
+ return `[${pExtensions.map(quote).join(", ")}]`;
24
+ }
25
+ return "";
26
26
  }
27
27
 
28
28
  /**
@@ -30,7 +30,7 @@ function extensionsToString(pExtensions) {
30
30
  * @returns {string}
31
31
  */
32
32
  function buildNotToTestRule(pInitOptions) {
33
- const lNotToTestRule = `{
33
+ const lNotToTestRule = `{
34
34
  name: 'not-to-test',
35
35
  comment:
36
36
  "This module depends on code within a folder that should only contain tests. As tests don't " +
@@ -44,12 +44,12 @@ function buildNotToTestRule(pInitOptions) {
44
44
  path: '{{testLocationRE}}'
45
45
  }
46
46
  },`;
47
- return pInitOptions.hasTestsOutsideSource
48
- ? lNotToTestRule.replace(
49
- /{{testLocationRE}}/g,
50
- folderNameArrayToRE(pInitOptions?.testLocation ?? []),
51
- )
52
- : "";
47
+ return pInitOptions.hasTestsOutsideSource
48
+ ? lNotToTestRule.replace(
49
+ /{{testLocationRE}}/g,
50
+ folderNameArrayToRE(pInitOptions?.testLocation ?? []),
51
+ )
52
+ : "";
53
53
  }
54
54
 
55
55
  /**
@@ -57,9 +57,9 @@ function buildNotToTestRule(pInitOptions) {
57
57
  * @returns {string}
58
58
  */
59
59
  function buildTsPreCompilationDepsAttribute(pInitOptions) {
60
- return pInitOptions.tsPreCompilationDeps
61
- ? "tsPreCompilationDeps: true,"
62
- : "// tsPreCompilationDeps: false,";
60
+ return pInitOptions.tsPreCompilationDeps
61
+ ? "tsPreCompilationDeps: true,"
62
+ : "// tsPreCompilationDeps: false,";
63
63
  }
64
64
 
65
65
  /**
@@ -68,9 +68,9 @@ function buildTsPreCompilationDepsAttribute(pInitOptions) {
68
68
  * @returns {string}
69
69
  */
70
70
  function buildDetectJSDocumentImportsAttribute(pInitOptions) {
71
- return pInitOptions.detectJSDocImports
72
- ? "detectJSDocImports: true,"
73
- : "// detectJSDocImports: true,";
71
+ return pInitOptions.detectJSDocImports
72
+ ? "detectJSDocImports: true,"
73
+ : "// detectJSDocImports: true,";
74
74
  }
75
75
 
76
76
  /**
@@ -79,9 +79,9 @@ function buildDetectJSDocumentImportsAttribute(pInitOptions) {
79
79
  * @returns {string}
80
80
  */
81
81
  function buildDetectProcessBuiltinModuleCalls(pInitOptions) {
82
- return pInitOptions.detectProcessBuiltinModuleCalls
83
- ? "detectProcessBuiltinModuleCalls: true,"
84
- : "// detectProcessBuiltinModuleCalls: true,";
82
+ return pInitOptions.detectProcessBuiltinModuleCalls
83
+ ? "detectProcessBuiltinModuleCalls: true,"
84
+ : "// detectProcessBuiltinModuleCalls: true,";
85
85
  }
86
86
 
87
87
  /**
@@ -89,9 +89,9 @@ function buildDetectProcessBuiltinModuleCalls(pInitOptions) {
89
89
  * @returns {string}
90
90
  */
91
91
  function buildCombinedDependenciesAttribute(pInitOptions) {
92
- return pInitOptions.combinedDependencies
93
- ? "combinedDependencies: true,"
94
- : "// combinedDependencies: false,";
92
+ return pInitOptions.combinedDependencies
93
+ ? "combinedDependencies: true,"
94
+ : "// combinedDependencies: false,";
95
95
  }
96
96
 
97
97
  /**
@@ -99,17 +99,17 @@ function buildCombinedDependenciesAttribute(pInitOptions) {
99
99
  * @returns {string}
100
100
  */
101
101
  function buildTsOrJsConfigAttribute(pInitOptions) {
102
- if (pInitOptions.useTsConfig) {
103
- return `tsConfig: {
102
+ if (pInitOptions.useTsConfig) {
103
+ return `tsConfig: {
104
104
  fileName: '${pInitOptions.tsConfig}'
105
105
  },`;
106
- }
107
- if (pInitOptions.useJsConfig) {
108
- return `tsConfig: {
106
+ }
107
+ if (pInitOptions.useJsConfig) {
108
+ return `tsConfig: {
109
109
  fileName: '${pInitOptions.jsConfig}'
110
110
  },`;
111
- }
112
- return `// tsConfig: {
111
+ }
112
+ return `// tsConfig: {
113
113
  // fileName: 'tsconfig.json'
114
114
  // },`;
115
115
  }
@@ -119,13 +119,13 @@ function buildTsOrJsConfigAttribute(pInitOptions) {
119
119
  * @returns {string}
120
120
  */
121
121
  function buildWebpackConfigAttribute(pInitOptions) {
122
- return pInitOptions.webpackConfig
123
- ? `webpackConfig: {
122
+ return pInitOptions.webpackConfig
123
+ ? `webpackConfig: {
124
124
  fileName: '${pInitOptions.webpackConfig}',
125
125
  // env: {},
126
126
  // arguments: {}
127
127
  },`
128
- : `// webpackConfig: {
128
+ : `// webpackConfig: {
129
129
  // fileName: 'webpack.config.js',
130
130
  // env: {},
131
131
  // arguments: {}
@@ -137,11 +137,11 @@ function buildWebpackConfigAttribute(pInitOptions) {
137
137
  * @returns {string}
138
138
  */
139
139
  function buildBabelConfigAttribute(pInitOptions) {
140
- return pInitOptions.babelConfig
141
- ? `babelConfig: {
140
+ return pInitOptions.babelConfig
141
+ ? `babelConfig: {
142
142
  fileName: '${pInitOptions.babelConfig}'
143
143
  },`
144
- : `// babelConfig: {
144
+ : `// babelConfig: {
145
145
  // fileName: '.babelrc',
146
146
  // },`;
147
147
  }
@@ -151,9 +151,9 @@ function buildBabelConfigAttribute(pInitOptions) {
151
151
  * @returns {string}
152
152
  */
153
153
  function buildExtensionsAttribute(pInitOptions) {
154
- return pInitOptions.specifyResolutionExtensions
155
- ? `extensions: ${extensionsToString(pInitOptions.resolutionExtensions)},`
156
- : `// extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"],`;
154
+ return pInitOptions.specifyResolutionExtensions
155
+ ? `extensions: ${extensionsToString(pInitOptions.resolutionExtensions)},`
156
+ : `// extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"],`;
157
157
  }
158
158
 
159
159
  /**
@@ -161,10 +161,10 @@ function buildExtensionsAttribute(pInitOptions) {
161
161
  * @returns {string}
162
162
  */
163
163
  function buildMainFieldsAttribute(pInitOptions) {
164
- if (pInitOptions.isTypeModule) {
165
- return `mainFields: ["module", "main", "types", "typings"],`;
166
- }
167
- return `
164
+ if (pInitOptions.isTypeModule) {
165
+ return `mainFields: ["module", "main", "types", "typings"],`;
166
+ }
167
+ return `
168
168
  // if you migrate to ESM (or are in an ESM environment already) you will want to
169
169
  // have "module" in the list of mainFields, like so:
170
170
  // mainFields: ["module", "main", "types", "typings"],
@@ -176,8 +176,8 @@ function buildMainFieldsAttribute(pInitOptions) {
176
176
  * @returns {string}
177
177
  */
178
178
  function buildBuiltInModulesAttribute(pInitOptions) {
179
- if (pInitOptions.usesBun) {
180
- return `
179
+ if (pInitOptions.usesBun) {
180
+ return `
181
181
  /* List of built-in modules to use on top of the ones node declares.
182
182
 
183
183
  See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#builtinmodules-influencing-what-to-consider-built-in--core-modules
@@ -197,8 +197,8 @@ function buildBuiltInModulesAttribute(pInitOptions) {
197
197
  ]
198
198
  },
199
199
  `;
200
- }
201
- return "";
200
+ }
201
+ return "";
202
202
  }
203
203
 
204
204
  /**
@@ -210,50 +210,50 @@ function buildBuiltInModulesAttribute(pInitOptions) {
210
210
  * @returns {string} the configuration as a string
211
211
  */
212
212
  export default function buildConfig(pInitOptions) {
213
- return configTemplate
214
- .replace(
215
- /{{sourceLocationRE}}/g,
216
- folderNameArrayToRE(pInitOptions.sourceLocation),
217
- )
218
- .replace(
219
- /{{resolutionExtensionsAsString}}/g,
220
- extensionsToString(pInitOptions.resolutionExtensions),
221
- )
222
- .replace("{{notToTestRule}}", buildNotToTestRule(pInitOptions))
223
- .replace(
224
- "{{detectJSDocImportsAttribute}}",
225
- buildDetectJSDocumentImportsAttribute(pInitOptions),
226
- )
227
- .replace(
228
- "{{detectProcessBuiltinModuleCalls}}",
229
- buildDetectProcessBuiltinModuleCalls(pInitOptions),
230
- )
231
- .replace(
232
- "{{tsPreCompilationDepsAttribute}}",
233
- buildTsPreCompilationDepsAttribute(pInitOptions),
234
- )
235
- .replace(
236
- "{{combinedDependenciesAttribute}}",
237
- buildCombinedDependenciesAttribute(pInitOptions),
238
- )
239
- .replace(
240
- "{{tsOrJsConfigAttribute}}",
241
- buildTsOrJsConfigAttribute(pInitOptions),
242
- )
243
- .replace(
244
- "{{webpackConfigAttribute}}",
245
- buildWebpackConfigAttribute(pInitOptions),
246
- )
247
- .replace(
248
- "{{babelConfigAttribute}}",
249
- buildBabelConfigAttribute(pInitOptions),
250
- )
251
- .replace(
252
- "{{builtInModulesAttribute}}",
253
- buildBuiltInModulesAttribute(pInitOptions),
254
- )
255
- .replace("{{extensionsAttribute}}", buildExtensionsAttribute(pInitOptions))
256
- .replace("{{mainFieldsAttribute}}", buildMainFieldsAttribute(pInitOptions))
257
- .replace("{{version}}", pInitOptions.version)
258
- .replace("{{date}}", pInitOptions.date);
213
+ return configTemplate
214
+ .replace(
215
+ /{{sourceLocationRE}}/g,
216
+ folderNameArrayToRE(pInitOptions.sourceLocation),
217
+ )
218
+ .replace(
219
+ /{{resolutionExtensionsAsString}}/g,
220
+ extensionsToString(pInitOptions.resolutionExtensions),
221
+ )
222
+ .replace("{{notToTestRule}}", buildNotToTestRule(pInitOptions))
223
+ .replace(
224
+ "{{detectJSDocImportsAttribute}}",
225
+ buildDetectJSDocumentImportsAttribute(pInitOptions),
226
+ )
227
+ .replace(
228
+ "{{detectProcessBuiltinModuleCalls}}",
229
+ buildDetectProcessBuiltinModuleCalls(pInitOptions),
230
+ )
231
+ .replace(
232
+ "{{tsPreCompilationDepsAttribute}}",
233
+ buildTsPreCompilationDepsAttribute(pInitOptions),
234
+ )
235
+ .replace(
236
+ "{{combinedDependenciesAttribute}}",
237
+ buildCombinedDependenciesAttribute(pInitOptions),
238
+ )
239
+ .replace(
240
+ "{{tsOrJsConfigAttribute}}",
241
+ buildTsOrJsConfigAttribute(pInitOptions),
242
+ )
243
+ .replace(
244
+ "{{webpackConfigAttribute}}",
245
+ buildWebpackConfigAttribute(pInitOptions),
246
+ )
247
+ .replace(
248
+ "{{babelConfigAttribute}}",
249
+ buildBabelConfigAttribute(pInitOptions),
250
+ )
251
+ .replace(
252
+ "{{builtInModulesAttribute}}",
253
+ buildBuiltInModulesAttribute(pInitOptions),
254
+ )
255
+ .replace("{{extensionsAttribute}}", buildExtensionsAttribute(pInitOptions))
256
+ .replace("{{mainFieldsAttribute}}", buildMainFieldsAttribute(pInitOptions))
257
+ .replace("{{version}}", pInitOptions.version)
258
+ .replace("{{date}}", pInitOptions.date);
259
259
  }
@@ -1,9 +1,9 @@
1
1
  import {
2
- readFileSync,
3
- readdirSync,
4
- accessSync,
5
- statSync,
6
- constants,
2
+ readFileSync,
3
+ readdirSync,
4
+ accessSync,
5
+ statSync,
6
+ constants,
7
7
  } from "node:fs";
8
8
  import { join } from "node:path";
9
9
  import { DEFAULT_CONFIG_FILE_NAME } from "../defaults.mjs";
@@ -25,7 +25,7 @@ const BABEL_CONFIG_CANDIDATE_PATTERN = /^\.babelrc$|.*babel.*\.json/gi;
25
25
  * @throws {SyntaxError} when the manifest's json is invalid
26
26
  */
27
27
  export function readManifest(pManifestFileName = "./package.json") {
28
- return JSON.parse(readFileSync(pManifestFileName, "utf8"));
28
+ return JSON.parse(readFileSync(pManifestFileName, "utf8"));
29
29
  }
30
30
 
31
31
  /**
@@ -36,42 +36,42 @@ export function readManifest(pManifestFileName = "./package.json") {
36
36
  * @returns {boolean}
37
37
  */
38
38
  export function fileExists(pFile) {
39
- try {
40
- accessSync(pFile, constants.R_OK);
41
- } catch (pError) {
42
- return false;
43
- }
44
- return true;
39
+ try {
40
+ accessSync(pFile, constants.R_OK);
41
+ } catch (pError) {
42
+ return false;
43
+ }
44
+ return true;
45
45
  }
46
46
 
47
47
  /**
48
48
  * @returns {boolean}
49
49
  */
50
50
  function babelIsConfiguredInManifest() {
51
- let lReturnValue = false;
52
-
53
- try {
54
- // @ts-expect-error defaultly tsc doesn't know about newfangled stuff like hasOwn
55
- lReturnValue = Object.hasOwn(readManifest(), "babel");
56
- } catch (pError) {
57
- // silently ignore - we'll return false anyway then
58
- }
59
- return lReturnValue;
51
+ let lReturnValue = false;
52
+
53
+ try {
54
+ // @ts-expect-error defaultly tsc doesn't know about newfangled stuff like hasOwn
55
+ lReturnValue = Object.hasOwn(readManifest(), "babel");
56
+ } catch (pError) {
57
+ // silently ignore - we'll return false anyway then
58
+ }
59
+ return lReturnValue;
60
60
  }
61
61
 
62
62
  /**
63
63
  * @returns {boolean}
64
64
  */
65
65
  export function isTypeModule() {
66
- let lReturnValue = false;
66
+ let lReturnValue = false;
67
67
 
68
- try {
69
- lReturnValue = (readManifest()?.type ?? "commonjs") === "module";
70
- } catch (pError) {
71
- // silently ignore - we'll return false anyway then
72
- }
68
+ try {
69
+ lReturnValue = (readManifest()?.type ?? "commonjs") === "module";
70
+ } catch (pError) {
71
+ // silently ignore - we'll return false anyway then
72
+ }
73
73
 
74
- return lReturnValue;
74
+ return lReturnValue;
75
75
  }
76
76
 
77
77
  /**
@@ -79,9 +79,9 @@ export function isTypeModule() {
79
79
  * @returns {string[]} Array of folder names
80
80
  */
81
81
  function getFolderNames(pFolderName) {
82
- return readdirSync(pFolderName, "utf8").filter((pFileName) =>
83
- statSync(join(pFolderName, pFileName)).isDirectory(),
84
- );
82
+ return readdirSync(pFolderName, "utf8").filter((pFileName) =>
83
+ statSync(join(pFolderName, pFileName)).isDirectory(),
84
+ );
85
85
  }
86
86
 
87
87
  /**
@@ -90,11 +90,11 @@ function getFolderNames(pFolderName) {
90
90
  * @returns {string[]}
91
91
  */
92
92
  function getMatchingFileNames(pPattern, pFolderName = process.cwd()) {
93
- return readdirSync(pFolderName, "utf8").filter(
94
- (pFileName) =>
95
- statSync(join(pFolderName, pFileName)).isFile() &&
96
- pFileName.match(pPattern),
97
- );
93
+ return readdirSync(pFolderName, "utf8").filter(
94
+ (pFileName) =>
95
+ statSync(join(pFolderName, pFileName)).isFile() &&
96
+ pFileName.match(pPattern),
97
+ );
98
98
  }
99
99
 
100
100
  /**
@@ -102,20 +102,20 @@ function getMatchingFileNames(pPattern, pFolderName = process.cwd()) {
102
102
  * @returns {boolean}
103
103
  */
104
104
  export function isLikelyMonoRepo(pFolderNames = getFolderNames(process.cwd())) {
105
- return pFolderNames.includes("packages");
105
+ return pFolderNames.includes("packages");
106
106
  }
107
107
 
108
108
  function getPackageManager(pManifest) {
109
- let lReturnValue = "";
110
- try {
111
- const lManifest = pManifest ?? readManifest();
112
- if (Object.hasOwn(lManifest, "packageManager")) {
113
- lReturnValue = lManifest.packageManager;
114
- }
115
- } catch (pError) {
116
- // silently ignore - we'll return the empty string anyway then
117
- }
118
- return lReturnValue;
109
+ let lReturnValue = "";
110
+ try {
111
+ const lManifest = pManifest ?? readManifest();
112
+ if (Object.hasOwn(lManifest, "packageManager")) {
113
+ lReturnValue = lManifest.packageManager;
114
+ }
115
+ } catch (pError) {
116
+ // silently ignore - we'll return the empty string anyway then
117
+ }
118
+ return lReturnValue;
119
119
  }
120
120
 
121
121
  /**
@@ -123,24 +123,24 @@ function getPackageManager(pManifest) {
123
123
  * @returns {boolean}
124
124
  */
125
125
  export function likelyUsesBun(pManifest) {
126
- const bunIsPackageManager = getPackageManager(pManifest).startsWith("bun");
127
- return (
128
- bunIsPackageManager || fileExists("bun.lockb") || fileExists("bunfig.toml")
129
- );
126
+ const bunIsPackageManager = getPackageManager(pManifest).startsWith("bun");
127
+ return (
128
+ bunIsPackageManager || fileExists("bun.lockb") || fileExists("bunfig.toml")
129
+ );
130
130
  }
131
131
 
132
132
  export function hasTestsWithinSource(pTestLocations, pSourceLocations) {
133
- return pTestLocations.every((pTestLocation) =>
134
- pSourceLocations.includes(pTestLocation),
135
- );
133
+ return pTestLocations.every((pTestLocation) =>
134
+ pSourceLocations.includes(pTestLocation),
135
+ );
136
136
  }
137
137
 
138
138
  export function getFolderCandidates(pCandidateFolderArray) {
139
- return (pFolderNames = getFolderNames(process.cwd())) => {
140
- return pFolderNames.filter((pFolderName) =>
141
- pCandidateFolderArray.includes(pFolderName),
142
- );
143
- };
139
+ return (pFolderNames = getFolderNames(process.cwd())) => {
140
+ return pFolderNames.filter((pFolderName) =>
141
+ pCandidateFolderArray.includes(pFolderName),
142
+ );
143
+ };
144
144
  }
145
145
 
146
146
  /**
@@ -148,52 +148,52 @@ export function getFolderCandidates(pCandidateFolderArray) {
148
148
  * @returns {string[]}
149
149
  */
150
150
  export function toSourceLocationArray(pLocations) {
151
- if (!Array.isArray(pLocations)) {
152
- return pLocations.split(",").map((pFolder) => pFolder.trim());
153
- }
154
- return pLocations;
151
+ if (!Array.isArray(pLocations)) {
152
+ return pLocations.split(",").map((pFolder) => pFolder.trim());
153
+ }
154
+ return pLocations;
155
155
  }
156
156
 
157
157
  /**
158
158
  * @returns {string[]}
159
159
  */
160
160
  function getManifestFilesWithABabelConfig() {
161
- return babelIsConfiguredInManifest() ? ["package.json"] : [];
161
+ return babelIsConfiguredInManifest() ? ["package.json"] : [];
162
162
  }
163
163
 
164
164
  export const getBabelConfigCandidates = () =>
165
- getManifestFilesWithABabelConfig().concat(
166
- getMatchingFileNames(BABEL_CONFIG_CANDIDATE_PATTERN),
167
- );
165
+ getManifestFilesWithABabelConfig().concat(
166
+ getMatchingFileNames(BABEL_CONFIG_CANDIDATE_PATTERN),
167
+ );
168
168
  export const hasBabelConfigCandidates = () =>
169
- getBabelConfigCandidates().length > 0;
169
+ getBabelConfigCandidates().length > 0;
170
170
 
171
171
  export const getTSConfigCandidates = (pFolderName = process.cwd()) =>
172
- getMatchingFileNames(TSCONFIG_CANDIDATE_PATTERN, pFolderName);
172
+ getMatchingFileNames(TSCONFIG_CANDIDATE_PATTERN, pFolderName);
173
173
  export const hasTSConfigCandidates = (pFolderName = process.cwd()) =>
174
- getTSConfigCandidates(pFolderName).length > 0;
174
+ getTSConfigCandidates(pFolderName).length > 0;
175
175
  export const getJSConfigCandidates = (pFolderName = process.cwd()) =>
176
- getMatchingFileNames(JSCONFIG_CANDIDATE_PATTERN, pFolderName);
176
+ getMatchingFileNames(JSCONFIG_CANDIDATE_PATTERN, pFolderName);
177
177
  export const hasJSConfigCandidates = (pFolderName = process.cwd()) =>
178
- getJSConfigCandidates(pFolderName).length > 0;
178
+ getJSConfigCandidates(pFolderName).length > 0;
179
179
 
180
180
  export const getWebpackConfigCandidates = () =>
181
- getMatchingFileNames(WEBPACK_CANDIDATE_PATTERN);
181
+ getMatchingFileNames(WEBPACK_CANDIDATE_PATTERN);
182
182
  export const hasWebpackConfigCandidates = () =>
183
- getWebpackConfigCandidates().length > 0;
183
+ getWebpackConfigCandidates().length > 0;
184
184
 
185
185
  export const getSourceFolderCandidates = getFolderCandidates(
186
- LIKELY_SOURCE_FOLDERS,
186
+ LIKELY_SOURCE_FOLDERS,
187
187
  );
188
188
  export const getTestFolderCandidates = getFolderCandidates(LIKELY_TEST_FOLDERS);
189
189
 
190
190
  export const getMonoRepoPackagesCandidates = getFolderCandidates(
191
- LIKELY_PACKAGES_FOLDERS,
191
+ LIKELY_PACKAGES_FOLDERS,
192
192
  );
193
193
 
194
194
  /**
195
195
  * @returns {string}
196
196
  */
197
197
  export function getDefaultConfigFileName() {
198
- return isTypeModule() ? ".dependency-cruiser.cjs" : DEFAULT_CONFIG_FILE_NAME;
198
+ return isTypeModule() ? ".dependency-cruiser.cjs" : DEFAULT_CONFIG_FILE_NAME;
199
199
  }
@@ -9,18 +9,18 @@ import findAllFiles from "#utl/find-all-files.mjs";
9
9
  * @param {string} pExtension
10
10
  */
11
11
  function reduceToCounts(pAll, pExtension) {
12
- if (pAll[pExtension]) {
13
- pAll[pExtension] += 1;
14
- } else {
15
- pAll[pExtension] = 1;
16
- }
17
- return pAll;
12
+ if (pAll[pExtension]) {
13
+ pAll[pExtension] += 1;
14
+ } else {
15
+ pAll[pExtension] = 1;
16
+ }
17
+ return pAll;
18
18
  }
19
19
 
20
20
  function compareByCount(pCountsObject) {
21
- return function compare(pLeft, pRight) {
22
- return pCountsObject[pRight] - pCountsObject[pLeft];
23
- };
21
+ return function compare(pLeft, pRight) {
22
+ return pCountsObject[pRight] - pCountsObject[pLeft];
23
+ };
24
24
  }
25
25
 
26
26
  /**
@@ -29,24 +29,24 @@ function compareByCount(pCountsObject) {
29
29
  * @returns {string[]}
30
30
  */
31
31
  export default function findExtensions(pDirectories, pOptions) {
32
- const lOptions = {
33
- baseDir: process.cwd(),
34
- scannableExtensions,
35
- ...pOptions,
36
- };
32
+ const lOptions = {
33
+ baseDir: process.cwd(),
34
+ scannableExtensions,
35
+ ...pOptions,
36
+ };
37
37
 
38
- const lExtensionsWithCounts = pDirectories
39
- .flatMap((pDirectory) =>
40
- findAllFiles(pDirectory, {
41
- baseDir: lOptions.baseDir,
42
- ignoreFileContents: lOptions?.ignoreFileContents,
43
- })
44
- .map(getExtension)
45
- .filter(Boolean),
46
- )
47
- .reduce(reduceToCounts, {});
38
+ const lExtensionsWithCounts = pDirectories
39
+ .flatMap((pDirectory) =>
40
+ findAllFiles(pDirectory, {
41
+ baseDir: lOptions.baseDir,
42
+ ignoreFileContents: lOptions?.ignoreFileContents,
43
+ })
44
+ .map(getExtension)
45
+ .filter(Boolean),
46
+ )
47
+ .reduce(reduceToCounts, {});
48
48
 
49
- return Object.keys(lExtensionsWithCounts)
50
- .filter((pExtension) => lOptions.scannableExtensions.includes(pExtension))
51
- .sort(compareByCount(lExtensionsWithCounts));
49
+ return Object.keys(lExtensionsWithCounts)
50
+ .filter((pExtension) => lOptions.scannableExtensions.includes(pExtension))
51
+ .sort(compareByCount(lExtensionsWithCounts));
52
52
  }