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,17 +1,17 @@
1
1
  import { join, extname, dirname } from "node:path";
2
2
  import { extract as acornExtract } from "./acorn/extract.mjs";
3
3
  import {
4
- extract as tscExtract,
5
- shouldUse as tscShouldUse,
4
+ extract as tscExtract,
5
+ shouldUse as tscShouldUse,
6
6
  } from "./tsc/extract.mjs";
7
7
  import {
8
- extract as swcExtract,
9
- shouldUse as swcShouldUse,
8
+ extract as swcExtract,
9
+ shouldUse as swcShouldUse,
10
10
  } from "./swc/extract.mjs";
11
11
  import resolve from "./resolve/index.mjs";
12
12
  import {
13
- detectPreCompilationNess,
14
- extractModuleAttributes,
13
+ detectPreCompilationNess,
14
+ extractModuleAttributes,
15
15
  } from "./helpers.mjs";
16
16
  import { uniqBy, intersects } from "#utl/array-util.mjs";
17
17
 
@@ -21,15 +21,15 @@ import { uniqBy, intersects } from "#utl/array-util.mjs";
21
21
  */
22
22
 
23
23
  function extractWithTsc(pCruiseOptions, pFileName, pTranspileOptions) {
24
- let lDependencies = tscExtract(pCruiseOptions, pFileName, pTranspileOptions);
25
-
26
- if (pCruiseOptions.tsPreCompilationDeps === "specify") {
27
- lDependencies = detectPreCompilationNess(
28
- lDependencies,
29
- acornExtract(pCruiseOptions, pFileName, pTranspileOptions),
30
- );
31
- }
32
- return lDependencies;
24
+ let lDependencies = tscExtract(pCruiseOptions, pFileName, pTranspileOptions);
25
+
26
+ if (pCruiseOptions.tsPreCompilationDeps === "specify") {
27
+ lDependencies = detectPreCompilationNess(
28
+ lDependencies,
29
+ acornExtract(pCruiseOptions, pFileName, pTranspileOptions),
30
+ );
31
+ }
32
+ return lDependencies;
33
33
  }
34
34
 
35
35
  /**
@@ -38,15 +38,15 @@ function extractWithTsc(pCruiseOptions, pFileName, pTranspileOptions) {
38
38
  * @returns {(IStrictCruiseOptions, string, any) => IDependency[]}
39
39
  */
40
40
  function determineExtractionFunction(pCruiseOptions, pFileName) {
41
- let lExtractionFunction = acornExtract;
41
+ let lExtractionFunction = acornExtract;
42
42
 
43
- if (tscShouldUse(pCruiseOptions, pFileName)) {
44
- lExtractionFunction = extractWithTsc;
45
- } else if (swcShouldUse(pCruiseOptions, pFileName)) {
46
- lExtractionFunction = swcExtract;
47
- }
43
+ if (tscShouldUse(pCruiseOptions, pFileName)) {
44
+ lExtractionFunction = extractWithTsc;
45
+ } else if (swcShouldUse(pCruiseOptions, pFileName)) {
46
+ lExtractionFunction = swcExtract;
47
+ }
48
48
 
49
- return lExtractionFunction;
49
+ return lExtractionFunction;
50
50
  }
51
51
 
52
52
  /**
@@ -56,65 +56,65 @@ function determineExtractionFunction(pCruiseOptions, pFileName) {
56
56
  * @returns {IDependency[]}
57
57
  */
58
58
  function extractDependencies(pCruiseOptions, pFileName, pTranspileOptions) {
59
- /** @type IDependency[] */
60
- let lDependencies = [];
61
-
62
- if (!pCruiseOptions.extraExtensionsToScan.includes(extname(pFileName))) {
63
- const lExtractionFunction = determineExtractionFunction(
64
- pCruiseOptions,
65
- pFileName,
66
- );
67
- lDependencies = lExtractionFunction(
68
- pCruiseOptions,
69
- pFileName,
70
- pTranspileOptions,
71
- );
72
- }
73
-
74
- return lDependencies.map((pDependency) => ({
75
- ...pDependency,
76
- ...extractModuleAttributes(pDependency.module),
77
- }));
59
+ /** @type IDependency[] */
60
+ let lDependencies = [];
61
+
62
+ if (!pCruiseOptions.extraExtensionsToScan.includes(extname(pFileName))) {
63
+ const lExtractionFunction = determineExtractionFunction(
64
+ pCruiseOptions,
65
+ pFileName,
66
+ );
67
+ lDependencies = lExtractionFunction(
68
+ pCruiseOptions,
69
+ pFileName,
70
+ pTranspileOptions,
71
+ );
72
+ }
73
+
74
+ return lDependencies.map((pDependency) => ({
75
+ ...pDependency,
76
+ ...extractModuleAttributes(pDependency.module),
77
+ }));
78
78
  }
79
79
 
80
80
  function matchesDoNotFollow({ resolved, dependencyTypes }, pDoNotFollow) {
81
- const lMatchesPath = pDoNotFollow.path
82
- ? RegExp(pDoNotFollow.path, "g").test(resolved)
83
- : false;
84
- const lMatchesDependencyTypes = pDoNotFollow.dependencyTypes
85
- ? intersects(dependencyTypes, pDoNotFollow.dependencyTypes)
86
- : false;
87
-
88
- return lMatchesPath || lMatchesDependencyTypes;
81
+ const lMatchesPath = pDoNotFollow.path
82
+ ? RegExp(pDoNotFollow.path, "g").test(resolved)
83
+ : false;
84
+ const lMatchesDependencyTypes = pDoNotFollow.dependencyTypes
85
+ ? intersects(dependencyTypes, pDoNotFollow.dependencyTypes)
86
+ : false;
87
+
88
+ return lMatchesPath || lMatchesDependencyTypes;
89
89
  }
90
90
 
91
91
  function addResolutionAttributes(
92
- { baseDir, doNotFollow },
93
- pFileName,
94
- pResolveOptions,
95
- pTranspileOptions,
92
+ { baseDir, doNotFollow },
93
+ pFileName,
94
+ pResolveOptions,
95
+ pTranspileOptions,
96
96
  ) {
97
- return function addAttributes(pDependency) {
98
- const lResolved = resolve(
99
- pDependency,
100
- baseDir,
101
- join(baseDir, dirname(pFileName)),
102
- pResolveOptions,
103
- pTranspileOptions,
104
- );
105
- const lMatchesDoNotFollow = matchesDoNotFollow(lResolved, doNotFollow);
106
-
107
- return {
108
- ...pDependency,
109
- ...lResolved,
110
- followable: lResolved.followable && !lMatchesDoNotFollow,
111
- matchesDoNotFollow: lMatchesDoNotFollow,
112
- };
113
- };
97
+ return function addAttributes(pDependency) {
98
+ const lResolved = resolve(
99
+ pDependency,
100
+ baseDir,
101
+ join(baseDir, dirname(pFileName)),
102
+ pResolveOptions,
103
+ pTranspileOptions,
104
+ );
105
+ const lMatchesDoNotFollow = matchesDoNotFollow(lResolved, doNotFollow);
106
+
107
+ return {
108
+ ...pDependency,
109
+ ...lResolved,
110
+ followable: lResolved.followable && !lMatchesDoNotFollow,
111
+ matchesDoNotFollow: lMatchesDoNotFollow,
112
+ };
113
+ };
114
114
  }
115
115
 
116
116
  function matchesPattern(pFullPathToFile, pPattern) {
117
- return RegExp(pPattern, "g").test(pFullPathToFile);
117
+ return RegExp(pPattern, "g").test(pFullPathToFile);
118
118
  }
119
119
 
120
120
  /**
@@ -123,17 +123,17 @@ function matchesPattern(pFullPathToFile, pPattern) {
123
123
  * @returns {string}
124
124
  */
125
125
  function getDependencyUniqueKey({ module, moduleSystem, dependencyTypes }) {
126
- // c8: dependencyTypes is hardly ever undefined anymore since PR #884, but
127
- // we keep the `|| []` in for robustness sake
128
- return `${module} ${moduleSystem} ${(dependencyTypes || []).includes(
129
- "type-only",
130
- )}`;
126
+ // c8: dependencyTypes is hardly ever undefined anymore since PR #884, but
127
+ // we keep the `|| []` in for robustness sake
128
+ return `${module} ${moduleSystem} ${(dependencyTypes || []).includes(
129
+ "type-only",
130
+ )}`;
131
131
  }
132
132
 
133
133
  function compareDeps(pLeft, pRight) {
134
- return getDependencyUniqueKey(pLeft).localeCompare(
135
- getDependencyUniqueKey(pRight),
136
- );
134
+ return getDependencyUniqueKey(pLeft).localeCompare(
135
+ getDependencyUniqueKey(pRight),
136
+ );
137
137
  }
138
138
 
139
139
  /**
@@ -156,35 +156,35 @@ function compareDeps(pLeft, pRight) {
156
156
  * @return {IDependency[]} an array of dependency objects (see above)
157
157
  */
158
158
  export default function getDependencies(
159
- pFileName,
160
- pCruiseOptions,
161
- pResolveOptions,
162
- pTranspileOptions,
159
+ pFileName,
160
+ pCruiseOptions,
161
+ pResolveOptions,
162
+ pTranspileOptions,
163
163
  ) {
164
- try {
165
- return uniqBy(
166
- extractDependencies(pCruiseOptions, pFileName, pTranspileOptions),
167
- getDependencyUniqueKey,
168
- )
169
- .sort(compareDeps)
170
- .map(
171
- addResolutionAttributes(
172
- pCruiseOptions,
173
- pFileName,
174
- pResolveOptions,
175
- pTranspileOptions,
176
- ),
177
- )
178
- .filter(
179
- ({ resolved }) =>
180
- (!pCruiseOptions?.exclude?.path ||
181
- !matchesPattern(resolved, pCruiseOptions.exclude.path)) &&
182
- (!pCruiseOptions?.includeOnly?.path ||
183
- matchesPattern(resolved, pCruiseOptions.includeOnly.path)),
184
- );
185
- } catch (pError) {
186
- throw new Error(
187
- `Extracting dependencies ran afoul of...\n\n ${pError.message}\n... in ${pFileName}\n\n`,
188
- );
189
- }
164
+ try {
165
+ return uniqBy(
166
+ extractDependencies(pCruiseOptions, pFileName, pTranspileOptions),
167
+ getDependencyUniqueKey,
168
+ )
169
+ .sort(compareDeps)
170
+ .map(
171
+ addResolutionAttributes(
172
+ pCruiseOptions,
173
+ pFileName,
174
+ pResolveOptions,
175
+ pTranspileOptions,
176
+ ),
177
+ )
178
+ .filter(
179
+ ({ resolved }) =>
180
+ (!pCruiseOptions?.exclude?.path ||
181
+ !matchesPattern(resolved, pCruiseOptions.exclude.path)) &&
182
+ (!pCruiseOptions?.includeOnly?.path ||
183
+ matchesPattern(resolved, pCruiseOptions.includeOnly.path)),
184
+ );
185
+ } catch (pError) {
186
+ throw new Error(
187
+ `Extracting dependencies ran afoul of...\n\n ${pError.message}\n... in ${pFileName}\n\n`,
188
+ );
189
+ }
190
190
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
- getStats as tscStats,
3
- shouldUse as tscShouldUse,
2
+ getStats as tscStats,
3
+ shouldUse as tscShouldUse,
4
4
  } from "./tsc/extract.mjs";
5
5
  import { getStats as acornStats } from "./acorn/extract.mjs";
6
6
 
@@ -15,13 +15,13 @@ import { getStats as acornStats } from "./acorn/extract.mjs";
15
15
  * @returns {(IStrictCruiseOptions, string, any) => IDependency[]}
16
16
  */
17
17
  function determineExtractionFunction(pCruiseOptions, pFileName) {
18
- let lExtractionFunction = acornStats;
18
+ let lExtractionFunction = acornStats;
19
19
 
20
- if (tscShouldUse(pCruiseOptions, pFileName)) {
21
- lExtractionFunction = tscStats;
22
- }
20
+ if (tscShouldUse(pCruiseOptions, pFileName)) {
21
+ lExtractionFunction = tscStats;
22
+ }
23
23
 
24
- return lExtractionFunction;
24
+ return lExtractionFunction;
25
25
  }
26
26
 
27
27
  /**
@@ -35,19 +35,19 @@ function determineExtractionFunction(pCruiseOptions, pFileName) {
35
35
  * @return {IDependency[]} an array of dependency objects (see above)
36
36
  */
37
37
  export default function extractStats(
38
- pFileName,
39
- pCruiseOptions,
40
- pTranspileOptions,
38
+ pFileName,
39
+ pCruiseOptions,
40
+ pTranspileOptions,
41
41
  ) {
42
- try {
43
- return determineExtractionFunction(pCruiseOptions, pFileName)(
44
- pCruiseOptions,
45
- pFileName,
46
- pTranspileOptions,
47
- );
48
- } catch (pError) {
49
- throw new Error(
50
- `Extracting stats ran afoul of...\n\n ${pError.message}\n... in ${pFileName}\n\n`,
51
- );
52
- }
42
+ try {
43
+ return determineExtractionFunction(pCruiseOptions, pFileName)(
44
+ pCruiseOptions,
45
+ pFileName,
46
+ pTranspileOptions,
47
+ );
48
+ } catch (pError) {
49
+ throw new Error(
50
+ `Extracting stats ran afoul of...\n\n ${pError.message}\n... in ${pFileName}\n\n`,
51
+ );
52
+ }
53
53
  }
@@ -17,27 +17,27 @@ import pathToPosix from "#utl/path-to-posix.mjs";
17
17
  * @returns {string[]}
18
18
  */
19
19
  function getScannableExtensions(pOptions) {
20
- return scannableExtensions.concat(pOptions.extraExtensionsToScan);
20
+ return scannableExtensions.concat(pOptions.extraExtensionsToScan);
21
21
  }
22
22
 
23
23
  function fileIsScannable(pOptions, pPathToFile) {
24
- return getScannableExtensions(pOptions).includes(getExtension(pPathToFile));
24
+ return getScannableExtensions(pOptions).includes(getExtension(pPathToFile));
25
25
  }
26
26
 
27
27
  function shouldBeIncluded(pFullPathToFile, pOptions) {
28
- return (
29
- !pOptions?.includeOnly?.path ||
30
- filenameMatchesPattern(pFullPathToFile, pOptions.includeOnly.path)
31
- );
28
+ return (
29
+ !pOptions?.includeOnly?.path ||
30
+ filenameMatchesPattern(pFullPathToFile, pOptions.includeOnly.path)
31
+ );
32
32
  }
33
33
 
34
34
  function shouldBeExcluded(pFullPathToFile, pOptions) {
35
- return (
36
- (pOptions?.exclude?.path &&
37
- filenameMatchesPattern(pFullPathToFile, pOptions.exclude.path)) ||
38
- (pOptions?.doNotFollow?.path &&
39
- filenameMatchesPattern(pFullPathToFile, pOptions.doNotFollow.path))
40
- );
35
+ return (
36
+ (pOptions?.exclude?.path &&
37
+ filenameMatchesPattern(pFullPathToFile, pOptions.exclude.path)) ||
38
+ (pOptions?.doNotFollow?.path &&
39
+ filenameMatchesPattern(pFullPathToFile, pOptions.doNotFollow.path))
40
+ );
41
41
  }
42
42
 
43
43
  /**
@@ -46,41 +46,41 @@ function shouldBeExcluded(pFullPathToFile, pOptions) {
46
46
  * @returns {string[]}
47
47
  */
48
48
  function gatherScannableFilesFromDirectory(pDirectoryName, pOptions) {
49
- return readdirSync(join(pOptions.baseDir, pDirectoryName))
50
- .map((pFileName) => join(pDirectoryName, pFileName))
51
- .flatMap((pFullPathToFile) => {
52
- const lPosixPath = pathToPosix(pFullPathToFile);
53
- if (shouldBeExcluded(lPosixPath, pOptions)) {
54
- return [];
55
- }
56
- const lStat = statSync(join(pOptions.baseDir, pFullPathToFile), {
57
- throwIfNoEntry: false,
58
- });
49
+ return readdirSync(join(pOptions.baseDir, pDirectoryName))
50
+ .map((pFileName) => join(pDirectoryName, pFileName))
51
+ .flatMap((pFullPathToFile) => {
52
+ const lPosixPath = pathToPosix(pFullPathToFile);
53
+ if (shouldBeExcluded(lPosixPath, pOptions)) {
54
+ return [];
55
+ }
56
+ const lStat = statSync(join(pOptions.baseDir, pFullPathToFile), {
57
+ throwIfNoEntry: false,
58
+ });
59
59
 
60
- if (lStat) {
61
- if (lStat.isDirectory()) {
62
- return gatherScannableFilesFromDirectory(pFullPathToFile, pOptions);
63
- }
64
- if (
65
- fileIsScannable(pOptions, pFullPathToFile) &&
66
- shouldBeIncluded(lPosixPath, pOptions)
67
- ) {
68
- return lPosixPath;
69
- }
70
- }
71
- return [];
72
- });
60
+ if (lStat) {
61
+ if (lStat.isDirectory()) {
62
+ return gatherScannableFilesFromDirectory(pFullPathToFile, pOptions);
63
+ }
64
+ if (
65
+ fileIsScannable(pOptions, pFullPathToFile) &&
66
+ shouldBeIncluded(lPosixPath, pOptions)
67
+ ) {
68
+ return lPosixPath;
69
+ }
70
+ }
71
+ return [];
72
+ });
73
73
  }
74
74
 
75
75
  function expandGlob(pBaseDirectory, pScannedGlob) {
76
- const isMatch = picomatch(pathToPosix(pScannedGlob.glob), {
77
- windows: platform === "win32",
78
- });
79
- return readdirSync(join(pBaseDirectory, pScannedGlob.base), {
80
- recursive: true,
81
- })
82
- .filter((pFile) => isMatch(pFile))
83
- .map((pFile) => pathToPosix(join(pScannedGlob.base, pFile)));
76
+ const isMatch = picomatch(pathToPosix(pScannedGlob.glob), {
77
+ windows: platform === "win32",
78
+ });
79
+ return readdirSync(join(pBaseDirectory, pScannedGlob.base), {
80
+ recursive: true,
81
+ })
82
+ .filter((pFile) => isMatch(pFile))
83
+ .map((pFile) => pathToPosix(join(pScannedGlob.base, pFile)));
84
84
  }
85
85
 
86
86
  /**
@@ -103,27 +103,27 @@ function expandGlob(pBaseDirectory, pScannedGlob) {
103
103
  * @return {string[]} paths to files to be gathered.
104
104
  */
105
105
  export default function gatherInitialSources(
106
- pFileDirectoryAndGlobArray,
107
- pOptions,
106
+ pFileDirectoryAndGlobArray,
107
+ pOptions,
108
108
  ) {
109
- const lOptions = { baseDir: process.cwd(), ...pOptions };
109
+ const lOptions = { baseDir: process.cwd(), ...pOptions };
110
110
 
111
- return pFileDirectoryAndGlobArray
112
- .flatMap((pFileDirectoryOrGlob) => {
113
- const lScannedGlob = picomatch.scan(pFileDirectoryOrGlob, {
114
- windows: platform === "win32",
115
- });
116
- if (lScannedGlob.isGlob) {
117
- return expandGlob(lOptions.baseDir, lScannedGlob);
118
- }
119
- return normalize(pFileDirectoryOrGlob);
120
- })
121
- .flatMap((pFileOrDirectory) => {
122
- if (statSync(join(lOptions.baseDir, pFileOrDirectory)).isDirectory()) {
123
- return gatherScannableFilesFromDirectory(pFileOrDirectory, lOptions);
124
- }
125
- // Not a glob anymore, and not a directory => it's a file
126
- return pathToPosix(pFileOrDirectory);
127
- })
128
- .sort();
111
+ return pFileDirectoryAndGlobArray
112
+ .flatMap((pFileDirectoryOrGlob) => {
113
+ const lScannedGlob = picomatch.scan(pFileDirectoryOrGlob, {
114
+ windows: platform === "win32",
115
+ });
116
+ if (lScannedGlob.isGlob) {
117
+ return expandGlob(lOptions.baseDir, lScannedGlob);
118
+ }
119
+ return normalize(pFileDirectoryOrGlob);
120
+ })
121
+ .flatMap((pFileOrDirectory) => {
122
+ if (statSync(join(lOptions.baseDir, pFileOrDirectory)).isDirectory()) {
123
+ return gatherScannableFilesFromDirectory(pFileOrDirectory, lOptions);
124
+ }
125
+ // Not a glob anymore, and not a directory => it's a file
126
+ return pathToPosix(pFileOrDirectory);
127
+ })
128
+ .sort();
129
129
  }