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,193 +1,193 @@
1
1
  import { accessSync, constants } from "node:fs";
2
2
  import { isAbsolute } from "node:path";
3
3
  import {
4
- RULES_FILE_NAME_SEARCH_ARRAY,
5
- DEFAULT_BASELINE_FILE_NAME,
6
- OUTPUT_TO,
7
- OUTPUT_TYPE,
8
- WEBPACK_CONFIG,
9
- TYPESCRIPT_CONFIG,
10
- BABEL_CONFIG,
11
- OLD_DEFAULT_RULES_FILE_NAME,
4
+ RULES_FILE_NAME_SEARCH_ARRAY,
5
+ DEFAULT_BASELINE_FILE_NAME,
6
+ OUTPUT_TO,
7
+ OUTPUT_TYPE,
8
+ WEBPACK_CONFIG,
9
+ TYPESCRIPT_CONFIG,
10
+ BABEL_CONFIG,
11
+ OLD_DEFAULT_RULES_FILE_NAME,
12
12
  } from "./defaults.mjs";
13
13
  import { set } from "#utl/object-util.mjs";
14
14
  import loadConfig from "#config-utl/extract-depcruise-config/index.mjs";
15
15
 
16
16
  function getOptionValue(pDefault) {
17
- return (pValue) => (typeof pValue === "string" ? pValue : pDefault);
17
+ return (pValue) => (typeof pValue === "string" ? pValue : pDefault);
18
18
  }
19
19
 
20
20
  // eslint-disable-next-line complexity
21
21
  function normalizeConfigFileName(pCliOptions, pConfigWrapperName, pDefault) {
22
- let lOptions = structuredClone(pCliOptions);
23
-
24
- if (Object.hasOwn(lOptions, pConfigWrapperName)) {
25
- set(
26
- lOptions,
27
- `ruleSet.options.${pConfigWrapperName}.fileName`,
28
- getOptionValue(pDefault)(lOptions[pConfigWrapperName]),
29
- /* eslint security/detect-object-injection: 0 */
30
- );
31
- Reflect.deleteProperty(lOptions, pConfigWrapperName);
32
- }
33
-
34
- if (
35
- (lOptions?.ruleSet?.options?.[pConfigWrapperName] ?? null) &&
36
- !(lOptions?.ruleSet?.options?.[pConfigWrapperName]?.fileName ?? null)
37
- ) {
38
- set(lOptions, `ruleSet.options.${pConfigWrapperName}.fileName`, pDefault);
39
- }
40
-
41
- return lOptions;
22
+ let lOptions = structuredClone(pCliOptions);
23
+
24
+ if (Object.hasOwn(lOptions, pConfigWrapperName)) {
25
+ set(
26
+ lOptions,
27
+ `ruleSet.options.${pConfigWrapperName}.fileName`,
28
+ getOptionValue(pDefault)(lOptions[pConfigWrapperName]),
29
+ /* eslint security/detect-object-injection: 0 */
30
+ );
31
+ Reflect.deleteProperty(lOptions, pConfigWrapperName);
32
+ }
33
+
34
+ if (
35
+ (lOptions?.ruleSet?.options?.[pConfigWrapperName] ?? null) &&
36
+ !(lOptions?.ruleSet?.options?.[pConfigWrapperName]?.fileName ?? null)
37
+ ) {
38
+ set(lOptions, `ruleSet.options.${pConfigWrapperName}.fileName`, pDefault);
39
+ }
40
+
41
+ return lOptions;
42
42
  }
43
43
 
44
44
  function fileExists(pFileName) {
45
- try {
46
- accessSync(pFileName, constants.R_OK);
47
- return true;
48
- } catch (pError) {
49
- return false;
50
- }
45
+ try {
46
+ accessSync(pFileName, constants.R_OK);
47
+ return true;
48
+ } catch (pError) {
49
+ return false;
50
+ }
51
51
  }
52
52
 
53
53
  function validateAndGetCustomRulesFileName(pValidate) {
54
- let lReturnValue = "";
55
-
56
- if (fileExists(pValidate)) {
57
- lReturnValue = pValidate;
58
- } else {
59
- throw new Error(
60
- `Can't open config file '${pValidate}' for reading. Does it exist?\n` +
61
- ` - You can create a config file by running 'npx dependency-cruiser --init'\n` +
62
- ` - If you intended to run without a config file use --no-config\n`,
63
- );
64
- }
65
- return lReturnValue;
54
+ let lReturnValue = "";
55
+
56
+ if (fileExists(pValidate)) {
57
+ lReturnValue = pValidate;
58
+ } else {
59
+ throw new Error(
60
+ `Can't open config file '${pValidate}' for reading. Does it exist?\n` +
61
+ ` - You can create a config file by running 'npx dependency-cruiser --init'\n` +
62
+ ` - If you intended to run without a config file use --no-config\n`,
63
+ );
64
+ }
65
+ return lReturnValue;
66
66
  }
67
67
 
68
68
  function validateAndGetDefaultRulesFileName() {
69
- let lReturnValue = RULES_FILE_NAME_SEARCH_ARRAY.find(fileExists);
70
-
71
- if (typeof lReturnValue === "undefined") {
72
- throw new TypeError(
73
- `Can't open a config file (.dependency-cruiser.(c)js) at the default location. Does it exist?\n` +
74
- ` - You can create one by running 'npx dependency-cruiser --init'\n` +
75
- ` - Want to run a without a config file? Use --no-config\n`,
76
- );
77
- }
78
- return lReturnValue;
69
+ let lReturnValue = RULES_FILE_NAME_SEARCH_ARRAY.find(fileExists);
70
+
71
+ if (typeof lReturnValue === "undefined") {
72
+ throw new TypeError(
73
+ `Can't open a config file (.dependency-cruiser.(c)js) at the default location. Does it exist?\n` +
74
+ ` - You can create one by running 'npx dependency-cruiser --init'\n` +
75
+ ` - Want to run a without a config file? Use --no-config\n`,
76
+ );
77
+ }
78
+ return lReturnValue;
79
79
  }
80
80
 
81
81
  function validateAndNormalizeRulesFileName(pValidate) {
82
- let lReturnValue = "";
82
+ let lReturnValue = "";
83
83
 
84
- if (typeof pValidate === "string") {
85
- lReturnValue = validateAndGetCustomRulesFileName(pValidate);
86
- } else {
87
- lReturnValue = validateAndGetDefaultRulesFileName();
88
- }
84
+ if (typeof pValidate === "string") {
85
+ lReturnValue = validateAndGetCustomRulesFileName(pValidate);
86
+ } else {
87
+ lReturnValue = validateAndGetDefaultRulesFileName();
88
+ }
89
89
 
90
- return lReturnValue;
90
+ return lReturnValue;
91
91
  }
92
92
 
93
93
  function validateAndGetKnownViolationsFileName(pKnownViolations) {
94
- const lKnownViolationsFileName =
95
- typeof pKnownViolations === "string"
96
- ? pKnownViolations
97
- : DEFAULT_BASELINE_FILE_NAME;
98
-
99
- if (fileExists(lKnownViolationsFileName)) {
100
- return lKnownViolationsFileName;
101
- } else {
102
- throw new Error(
103
- `Can't open '${lKnownViolationsFileName}' for reading. Does it exist?\n` +
104
- ` (You can create a .dependency-cruiser-known-violations.json with --output-type baseline)\n`,
105
- );
106
- }
94
+ const lKnownViolationsFileName =
95
+ typeof pKnownViolations === "string"
96
+ ? pKnownViolations
97
+ : DEFAULT_BASELINE_FILE_NAME;
98
+
99
+ if (fileExists(lKnownViolationsFileName)) {
100
+ return lKnownViolationsFileName;
101
+ } else {
102
+ throw new Error(
103
+ `Can't open '${lKnownViolationsFileName}' for reading. Does it exist?\n` +
104
+ ` (You can create a .dependency-cruiser-known-violations.json with --output-type baseline)\n`,
105
+ );
106
+ }
107
107
  }
108
108
 
109
109
  function normalizeKnownViolationsOption(pCliOptions) {
110
- if (
111
- !Object.hasOwn(pCliOptions, "ignoreKnown") ||
112
- pCliOptions.ignoreKnown === false
113
- ) {
114
- return {};
115
- }
116
- return {
117
- knownViolationsFile: validateAndGetKnownViolationsFileName(
118
- pCliOptions.ignoreKnown,
119
- ),
120
- };
110
+ if (
111
+ !Object.hasOwn(pCliOptions, "ignoreKnown") ||
112
+ pCliOptions.ignoreKnown === false
113
+ ) {
114
+ return {};
115
+ }
116
+ return {
117
+ knownViolationsFile: validateAndGetKnownViolationsFileName(
118
+ pCliOptions.ignoreKnown,
119
+ ),
120
+ };
121
121
  }
122
122
 
123
123
  async function normalizeValidationOption(pCliOptions) {
124
- if (!pCliOptions.validate) {
125
- return {
126
- validate: false,
127
- };
128
- }
129
- const rulesFile = validateAndNormalizeRulesFileName(pCliOptions.validate);
130
- return {
131
- rulesFile,
132
- ruleSet: await loadConfig(
133
- isAbsolute(rulesFile) ? rulesFile : `./${rulesFile}`,
134
- ),
135
- validate: true,
136
- };
124
+ if (!pCliOptions.validate) {
125
+ return {
126
+ validate: false,
127
+ };
128
+ }
129
+ const rulesFile = validateAndNormalizeRulesFileName(pCliOptions.validate);
130
+ return {
131
+ rulesFile,
132
+ ruleSet: await loadConfig(
133
+ isAbsolute(rulesFile) ? rulesFile : `./${rulesFile}`,
134
+ ),
135
+ validate: true,
136
+ };
137
137
  }
138
138
 
139
139
  function normalizeProgress(pCliOptions) {
140
- if (!Object.hasOwn(pCliOptions, "progress")) {
141
- return {};
142
- }
143
-
144
- let lProgress = pCliOptions.progress;
145
- if (lProgress === true) {
146
- lProgress = "cli-feedback";
147
- }
148
- return { progress: lProgress };
140
+ if (!Object.hasOwn(pCliOptions, "progress")) {
141
+ return {};
142
+ }
143
+
144
+ let lProgress = pCliOptions.progress;
145
+ if (lProgress === true) {
146
+ lProgress = "cli-feedback";
147
+ }
148
+ return { progress: lProgress };
149
149
  }
150
150
 
151
151
  function normalizeCacheStrategy(pCliOptions) {
152
- if (!Object.hasOwn(pCliOptions, "cacheStrategy")) {
153
- return {};
154
- }
155
- const lStrategy =
156
- pCliOptions.cacheStrategy === "content" ? "content" : "metadata";
157
-
158
- let lReturnValue = {};
159
-
160
- if (pCliOptions.cache && typeof pCliOptions.cache === "object") {
161
- lReturnValue.cache = structuredClone(pCliOptions.cache);
162
- lReturnValue.cache.strategy = lStrategy;
163
- } else {
164
- lReturnValue = {
165
- cache: {
166
- strategy: lStrategy,
167
- },
168
- };
169
- }
170
- return lReturnValue;
152
+ if (!Object.hasOwn(pCliOptions, "cacheStrategy")) {
153
+ return {};
154
+ }
155
+ const lStrategy =
156
+ pCliOptions.cacheStrategy === "content" ? "content" : "metadata";
157
+
158
+ let lReturnValue = {};
159
+
160
+ if (pCliOptions.cache && typeof pCliOptions.cache === "object") {
161
+ lReturnValue.cache = structuredClone(pCliOptions.cache);
162
+ lReturnValue.cache.strategy = lStrategy;
163
+ } else {
164
+ lReturnValue = {
165
+ cache: {
166
+ strategy: lStrategy,
167
+ },
168
+ };
169
+ }
170
+ return lReturnValue;
171
171
  }
172
172
 
173
173
  function normalizeCache(pCliOptions) {
174
- if (!Object.hasOwn(pCliOptions, "cache")) {
175
- return {};
176
- }
177
-
178
- if (pCliOptions.cache === true) {
179
- return { cache: {} };
180
- }
181
-
182
- if (typeof pCliOptions.cache === "string") {
183
- return {
184
- cache: {
185
- folder: pCliOptions.cache,
186
- },
187
- };
188
- }
189
-
190
- return { cache: false };
174
+ if (!Object.hasOwn(pCliOptions, "cache")) {
175
+ return {};
176
+ }
177
+
178
+ if (pCliOptions.cache === true) {
179
+ return { cache: {} };
180
+ }
181
+
182
+ if (typeof pCliOptions.cache === "string") {
183
+ return {
184
+ cache: {
185
+ folder: pCliOptions.cache,
186
+ },
187
+ };
188
+ }
189
+
190
+ return { cache: false };
191
191
  }
192
192
 
193
193
  /**
@@ -199,43 +199,43 @@ function normalizeCache(pCliOptions) {
199
199
  * @return {object} [description]
200
200
  */
201
201
  export default async function normalizeOptions(pOptionsAsPassedFromCommander) {
202
- let lOptions = {
203
- outputTo: OUTPUT_TO,
204
- outputType: OUTPUT_TYPE,
205
- ...pOptionsAsPassedFromCommander,
206
- };
207
-
208
- if (Object.hasOwn(lOptions, "moduleSystems")) {
209
- lOptions.moduleSystems = lOptions.moduleSystems
210
- .split(",")
211
- .map((pString) => pString.trim());
212
- }
213
-
214
- if (Object.hasOwn(lOptions, "config")) {
215
- lOptions.validate = lOptions.config;
216
- }
217
-
218
- lOptions = { ...lOptions, ...(await normalizeValidationOption(lOptions)) };
219
- lOptions = { ...lOptions, ...normalizeProgress(lOptions) };
220
- lOptions = { ...lOptions, ...normalizeCache(lOptions) };
221
- lOptions = { ...lOptions, ...normalizeCacheStrategy(lOptions) };
222
- lOptions = { ...lOptions, ...normalizeKnownViolationsOption(lOptions) };
223
- lOptions = normalizeConfigFileName(lOptions, "webpackConfig", WEBPACK_CONFIG);
224
- lOptions = normalizeConfigFileName(lOptions, "tsConfig", TYPESCRIPT_CONFIG);
225
- lOptions = normalizeConfigFileName(lOptions, "babelConfig", BABEL_CONFIG);
226
- if (Object.hasOwn(lOptions, "affected") && lOptions.affected !== false) {
227
- const { list } = await import("watskeburt");
228
- lOptions.reaches = await list({
229
- oldRevision: lOptions.affected === true ? "main" : lOptions.affected,
230
- outputType: "regex",
231
- extensions:
232
- "cjs,cjsx,coffee,csx,cts,js,json,jsx,litcoffee,ls,mjs,mts,svelte,ts,tsx,vue,vuex",
233
- });
234
- }
235
-
236
- return lOptions;
202
+ let lOptions = {
203
+ outputTo: OUTPUT_TO,
204
+ outputType: OUTPUT_TYPE,
205
+ ...pOptionsAsPassedFromCommander,
206
+ };
207
+
208
+ if (Object.hasOwn(lOptions, "moduleSystems")) {
209
+ lOptions.moduleSystems = lOptions.moduleSystems
210
+ .split(",")
211
+ .map((pString) => pString.trim());
212
+ }
213
+
214
+ if (Object.hasOwn(lOptions, "config")) {
215
+ lOptions.validate = lOptions.config;
216
+ }
217
+
218
+ lOptions = { ...lOptions, ...(await normalizeValidationOption(lOptions)) };
219
+ lOptions = { ...lOptions, ...normalizeProgress(lOptions) };
220
+ lOptions = { ...lOptions, ...normalizeCache(lOptions) };
221
+ lOptions = { ...lOptions, ...normalizeCacheStrategy(lOptions) };
222
+ lOptions = { ...lOptions, ...normalizeKnownViolationsOption(lOptions) };
223
+ lOptions = normalizeConfigFileName(lOptions, "webpackConfig", WEBPACK_CONFIG);
224
+ lOptions = normalizeConfigFileName(lOptions, "tsConfig", TYPESCRIPT_CONFIG);
225
+ lOptions = normalizeConfigFileName(lOptions, "babelConfig", BABEL_CONFIG);
226
+ if (Object.hasOwn(lOptions, "affected") && lOptions.affected !== false) {
227
+ const { list } = await import("watskeburt");
228
+ lOptions.reaches = await list({
229
+ oldRevision: lOptions.affected === true ? "main" : lOptions.affected,
230
+ outputType: "regex",
231
+ extensions:
232
+ "cjs,cjsx,coffee,csx,cts,js,json,jsx,litcoffee,ls,mjs,mts,svelte,ts,tsx,vue,vuex",
233
+ });
234
+ }
235
+
236
+ return lOptions;
237
237
  }
238
238
 
239
239
  export const determineRulesFileName = getOptionValue(
240
- OLD_DEFAULT_RULES_FILE_NAME,
240
+ OLD_DEFAULT_RULES_FILE_NAME,
241
241
  );
@@ -3,16 +3,16 @@ import { fileURLToPath } from "node:url";
3
3
  import { getHeader, getFooter } from "#report/dot-webpage/wrap-in-html.mjs";
4
4
 
5
5
  const STYLESHEET_FILE = fileURLToPath(
6
- new URL(
7
- "../../report/dot-webpage/svg-in-html-snippets/style.css",
8
- import.meta.url,
9
- ),
6
+ new URL(
7
+ "../../report/dot-webpage/svg-in-html-snippets/style.css",
8
+ import.meta.url,
9
+ ),
10
10
  );
11
11
  const SCRIPT_FILE = fileURLToPath(
12
- new URL(
13
- "../../report/dot-webpage/svg-in-html-snippets/script.cjs",
14
- import.meta.url,
15
- ),
12
+ new URL(
13
+ "../../report/dot-webpage/svg-in-html-snippets/script.cjs",
14
+ import.meta.url,
15
+ ),
16
16
  );
17
17
 
18
18
  /**
@@ -30,34 +30,34 @@ const SCRIPT_FILE = fileURLToPath(
30
30
  * @param {writeStream} pOutStream stream to write to
31
31
  */
32
32
  export default async function wrap(pInStream, pOutStream) {
33
- const [lStylesheet, lScript] = await Promise.all([
34
- readFile(STYLESHEET_FILE, "utf8"),
35
- readFile(SCRIPT_FILE, "utf8"),
36
- ]);
33
+ const [lStylesheet, lScript] = await Promise.all([
34
+ readFile(STYLESHEET_FILE, "utf8"),
35
+ readFile(SCRIPT_FILE, "utf8"),
36
+ ]);
37
37
 
38
- pOutStream.write(getHeader(lStylesheet));
39
- pInStream
40
- .on("end", () => {
41
- pOutStream.write(getFooter(lScript));
42
- pOutStream.end();
43
- })
44
- .on(
45
- "error",
46
- /* c8 ignore start */
47
- (pError) => {
48
- process.stderr.write(`${pError}\n`);
49
- },
50
- /* c8 ignore stop */
51
- )
52
- /*
53
- * We could have put the whole html in a template literal, but we don't know
54
- * how large the svg that's going to be injected is going to be - it could just
55
- * as well be as large that if we're going to buffer it, it's going into out
56
- * of memory territory.
57
- *
58
- * We circumvent that by streaming the svg in between the header and the footer.
59
- */
60
- .on("data", (pChunk) => {
61
- pOutStream.write(pChunk);
62
- });
38
+ pOutStream.write(getHeader(lStylesheet));
39
+ pInStream
40
+ .on("end", () => {
41
+ pOutStream.write(getFooter(lScript));
42
+ pOutStream.end();
43
+ })
44
+ .on(
45
+ "error",
46
+ /* c8 ignore start */
47
+ (pError) => {
48
+ process.stderr.write(`${pError}\n`);
49
+ },
50
+ /* c8 ignore stop */
51
+ )
52
+ /*
53
+ * We could have put the whole html in a template literal, but we don't know
54
+ * how large the svg that's going to be injected is going to be - it could just
55
+ * as well be as large that if we're going to buffer it, it's going into out
56
+ * of memory territory.
57
+ *
58
+ * We circumvent that by streaming the svg in between the header and the footer.
59
+ */
60
+ .on("data", (pChunk) => {
61
+ pOutStream.write(pChunk);
62
+ });
63
63
  }
@@ -1,11 +1,11 @@
1
1
  import { accessSync, constants } from "node:fs";
2
2
 
3
3
  export default function assertFileExistence(pDirectoryOrFile) {
4
- try {
5
- accessSync(pDirectoryOrFile, constants.R_OK);
6
- } catch (pError) {
7
- throw new Error(
8
- `Can't open '${pDirectoryOrFile}' for reading. Does it exist?\n`,
9
- );
10
- }
4
+ try {
5
+ accessSync(pDirectoryOrFile, constants.R_OK);
6
+ } catch (pError) {
7
+ throw new Error(
8
+ `Can't open '${pDirectoryOrFile}' for reading. Does it exist?\n`,
9
+ );
10
+ }
11
11
  }
@@ -3,14 +3,14 @@ import { writeFileSync, createReadStream } from "node:fs";
3
3
  const PIPE_BUFFER_SIZE = 512;
4
4
 
5
5
  function writeToFile(pOutputTo, pDependencyString) {
6
- try {
7
- writeFileSync(pOutputTo, pDependencyString, {
8
- encoding: "utf8",
9
- flag: "w",
10
- });
11
- } catch (pError) {
12
- throw new Error(`Writing to '${pOutputTo}' didn't work. ${pError}`);
13
- }
6
+ try {
7
+ writeFileSync(pOutputTo, pDependencyString, {
8
+ encoding: "utf8",
9
+ flag: "w",
10
+ });
11
+ } catch (pError) {
12
+ throw new Error(`Writing to '${pOutputTo}' didn't work. ${pError}`);
13
+ }
14
14
  }
15
15
 
16
16
  /**
@@ -27,33 +27,30 @@ function writeToFile(pOutputTo, pDependencyString) {
27
27
  * @returns {void} nothing
28
28
  */
29
29
  function writeToStdOut(pString, pBufferSize = PIPE_BUFFER_SIZE) {
30
- const lNumberOfChunks = Math.ceil(pString.length / pBufferSize);
30
+ const lNumberOfChunks = Math.ceil(pString.length / pBufferSize);
31
31
 
32
- /* eslint no-plusplus: 0 */
33
- for (let lIndex = 0; lIndex < lNumberOfChunks; lIndex++) {
34
- const lChunkStart = lIndex * pBufferSize;
35
- process.stdout.write(
36
- pString.substring(lChunkStart, lChunkStart + pBufferSize),
37
- "utf8",
38
- );
39
- }
32
+ /* eslint no-plusplus: 0 */
33
+ for (let lIndex = 0; lIndex < lNumberOfChunks; lIndex++) {
34
+ const lChunkStart = lIndex * pBufferSize;
35
+ process.stdout.write(
36
+ pString.substring(lChunkStart, lChunkStart + pBufferSize),
37
+ "utf8",
38
+ );
39
+ }
40
40
  }
41
41
  export function write(pOutputTo, pContent) {
42
- // previously we checked here to ensure pContent ended on an EOL (and if it
43
- // didn't we added one). As for one or two reporters we DON'T want this
44
- // to happen automatically (e.g. the 'null' one) we've moved that check
45
- // to the individual reporters and with a unit test ensured that all
46
- // reporters (current and future) keep doing that.
47
- if ("-" === pOutputTo) {
48
- writeToStdOut(pContent);
49
- } else {
50
- writeToFile(pOutputTo, pContent);
51
- }
42
+ // Reporters are responsible for ensuring output ends with a newline so the
43
+ // write function intentionally does not append an EOL
44
+ if ("-" === pOutputTo) {
45
+ writeToStdOut(pContent);
46
+ } else {
47
+ writeToFile(pOutputTo, pContent);
48
+ }
52
49
  }
53
50
 
54
51
  export function getInStream(pInputFrom) {
55
- if ("-" === pInputFrom) {
56
- return process.stdin;
57
- }
58
- return createReadStream(pInputFrom);
52
+ if ("-" === pInputFrom) {
53
+ return process.stdin;
54
+ }
55
+ return createReadStream(pInputFrom);
59
56
  }