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,4 +1,5 @@
1
1
  import { normalizeREProperties, normalizeToREAsString } from "../helpers.mjs";
2
+ import { bus } from "#utl/bus.mjs";
2
3
 
3
4
  /**
4
5
  * @import { RuleScopeType } from "../../../types/shared-types.mjs";
@@ -16,9 +17,9 @@ const DEFAULT_RULE = "unnamed";
16
17
  const DEFAULT_SCOPE = "module";
17
18
 
18
19
  function normalizeSeverity(pSeverity) {
19
- const lSeverity = pSeverity ?? DEFAULT_SEVERITY;
20
+ const lSeverity = pSeverity ?? DEFAULT_SEVERITY;
20
21
 
21
- return VALID_SEVERITIES.test(lSeverity) ? lSeverity : DEFAULT_SEVERITY;
22
+ return VALID_SEVERITIES.test(lSeverity) ? lSeverity : DEFAULT_SEVERITY;
22
23
  }
23
24
  /**
24
25
  *
@@ -26,7 +27,7 @@ function normalizeSeverity(pSeverity) {
26
27
  * @returns {string}
27
28
  */
28
29
  function normalizeName(pRuleName) {
29
- return pRuleName ?? DEFAULT_RULE;
30
+ return pRuleName ?? DEFAULT_RULE;
30
31
  }
31
32
 
32
33
  /**
@@ -34,7 +35,7 @@ function normalizeName(pRuleName) {
34
35
  * @returns {RuleScopeType}
35
36
  */
36
37
  function normalizeScope(pScope) {
37
- return pScope ?? DEFAULT_SCOPE;
38
+ return pScope ?? DEFAULT_SCOPE;
38
39
  }
39
40
 
40
41
  /**
@@ -42,48 +43,48 @@ function normalizeScope(pScope) {
42
43
  * @returns {IStrictMiniDependencyRestriction}
43
44
  */
44
45
  function normalizeVia(pVia) {
45
- let lReturnValue = {};
46
+ let lReturnValue = {};
46
47
 
47
- if (typeof pVia === "string" || Array.isArray(pVia)) {
48
- lReturnValue.path = pVia;
49
- } else {
50
- lReturnValue = structuredClone(pVia);
51
- }
52
- if (lReturnValue?.path) {
53
- lReturnValue.path = normalizeToREAsString(lReturnValue.path);
54
- }
55
- return lReturnValue;
48
+ if (typeof pVia === "string" || Array.isArray(pVia)) {
49
+ lReturnValue.path = pVia;
50
+ } else {
51
+ lReturnValue = structuredClone(pVia);
52
+ }
53
+ if (lReturnValue?.path) {
54
+ lReturnValue.path = normalizeToREAsString(lReturnValue.path);
55
+ }
56
+ return lReturnValue;
56
57
  }
57
58
 
58
59
  // eslint-disable-next-line complexity
59
60
  function normalizeVias(pRuleTo) {
60
- const lRuleTo = structuredClone(pRuleTo);
61
+ const lRuleTo = structuredClone(pRuleTo);
61
62
 
62
- if (lRuleTo?.via) {
63
- lRuleTo.via = normalizeVia(lRuleTo.via);
64
- }
65
- if (lRuleTo?.viaOnly) {
66
- lRuleTo.viaOnly = normalizeVia(lRuleTo.viaOnly);
67
- }
68
- if (lRuleTo?.viaNot) {
69
- if (!lRuleTo?.viaOnly?.pathNot) {
70
- lRuleTo.viaOnly = {
71
- ...lRuleTo.viaOnly,
72
- pathNot: normalizeToREAsString(lRuleTo.viaNot),
73
- };
74
- }
75
- delete lRuleTo.viaNot;
76
- }
77
- if (lRuleTo?.viaSomeNot) {
78
- if (!lRuleTo?.via?.pathNot) {
79
- lRuleTo.via = {
80
- ...lRuleTo.via,
81
- pathNot: normalizeToREAsString(lRuleTo.viaSomeNot),
82
- };
83
- }
84
- delete lRuleTo.viaSomeNot;
85
- }
86
- return lRuleTo;
63
+ if (lRuleTo?.via) {
64
+ lRuleTo.via = normalizeVia(lRuleTo.via);
65
+ }
66
+ if (lRuleTo?.viaOnly) {
67
+ lRuleTo.viaOnly = normalizeVia(lRuleTo.viaOnly);
68
+ }
69
+ if (lRuleTo?.viaNot) {
70
+ if (!lRuleTo?.viaOnly?.pathNot) {
71
+ lRuleTo.viaOnly = {
72
+ ...lRuleTo.viaOnly,
73
+ pathNot: normalizeToREAsString(lRuleTo.viaNot),
74
+ };
75
+ }
76
+ delete lRuleTo.viaNot;
77
+ }
78
+ if (lRuleTo?.viaSomeNot) {
79
+ if (!lRuleTo?.via?.pathNot) {
80
+ lRuleTo.via = {
81
+ ...lRuleTo.via,
82
+ pathNot: normalizeToREAsString(lRuleTo.viaSomeNot),
83
+ };
84
+ }
85
+ delete lRuleTo.viaSomeNot;
86
+ }
87
+ return lRuleTo;
87
88
  }
88
89
 
89
90
  /**
@@ -91,16 +92,16 @@ function normalizeVias(pRuleTo) {
91
92
  * @returns {IStrictAnyRuleType}
92
93
  */
93
94
  function normalizeRule(pRule) {
94
- const lRuleTo = normalizeVias(pRule.to);
95
- return {
96
- ...pRule,
97
- severity: normalizeSeverity(pRule.severity),
98
- name: normalizeName(pRule.name),
99
- from: normalizeREProperties(pRule.from),
100
- to: normalizeREProperties(lRuleTo),
101
- scope: normalizeScope(pRule.scope),
102
- ...(pRule.module ? { module: normalizeREProperties(pRule.module) } : {}),
103
- };
95
+ const lRuleTo = normalizeVias(pRule.to);
96
+ return {
97
+ ...pRule,
98
+ severity: normalizeSeverity(pRule.severity),
99
+ name: normalizeName(pRule.name),
100
+ from: normalizeREProperties(pRule.from),
101
+ to: normalizeREProperties(lRuleTo),
102
+ scope: normalizeScope(pRule.scope),
103
+ ...(pRule.module ? { module: normalizeREProperties(pRule.module) } : {}),
104
+ };
104
105
  }
105
106
 
106
107
  /**
@@ -113,37 +114,38 @@ function normalizeRule(pRule) {
113
114
  * @return {IStrictRuleSet}
114
115
  */
115
116
  export default function normalizeRuleSet(pRuleSet) {
116
- const lRuleSet = structuredClone(pRuleSet);
117
+ bus.info("parse rule set: normalize");
118
+ const lRuleSet = structuredClone(pRuleSet);
117
119
 
118
- if (lRuleSet?.allowed) {
119
- lRuleSet.allowedSeverity = normalizeSeverity(lRuleSet.allowedSeverity);
120
- if (lRuleSet.allowedSeverity === "ignore") {
121
- Reflect.deleteProperty(lRuleSet, "allowed");
122
- Reflect.deleteProperty(lRuleSet, "allowedSeverity");
123
- } else {
124
- lRuleSet.allowed = lRuleSet.allowed.map((pRule) => {
125
- const lRuleTo = normalizeVias(pRule.to);
126
- return {
127
- ...pRule,
128
- name: "not-in-allowed",
129
- from: normalizeREProperties(pRule.from),
130
- to: normalizeREProperties(lRuleTo),
131
- };
132
- });
133
- }
134
- }
120
+ if (lRuleSet?.allowed) {
121
+ lRuleSet.allowedSeverity = normalizeSeverity(lRuleSet.allowedSeverity);
122
+ if (lRuleSet.allowedSeverity === "ignore") {
123
+ Reflect.deleteProperty(lRuleSet, "allowed");
124
+ Reflect.deleteProperty(lRuleSet, "allowedSeverity");
125
+ } else {
126
+ lRuleSet.allowed = lRuleSet.allowed.map((pRule) => {
127
+ const lRuleTo = normalizeVias(pRule.to);
128
+ return {
129
+ ...pRule,
130
+ name: "not-in-allowed",
131
+ from: normalizeREProperties(pRule.from),
132
+ to: normalizeREProperties(lRuleTo),
133
+ };
134
+ });
135
+ }
136
+ }
135
137
 
136
- if (lRuleSet?.forbidden) {
137
- lRuleSet.forbidden = lRuleSet.forbidden
138
- .map(normalizeRule)
139
- .filter((pRule) => pRule.severity !== "ignore");
140
- }
138
+ if (lRuleSet?.forbidden) {
139
+ lRuleSet.forbidden = lRuleSet.forbidden
140
+ .map(normalizeRule)
141
+ .filter((pRule) => pRule.severity !== "ignore");
142
+ }
141
143
 
142
- if (lRuleSet?.required) {
143
- lRuleSet.required = lRuleSet.required
144
- .map(normalizeRule)
145
- .filter((pRule) => pRule.severity !== "ignore");
146
- }
144
+ if (lRuleSet?.required) {
145
+ lRuleSet.required = lRuleSet.required
146
+ .map(normalizeRule)
147
+ .filter((pRule) => pRule.severity !== "ignore");
148
+ }
147
149
 
148
- return lRuleSet;
150
+ return lRuleSet;
149
151
  }
package/src/meta.cjs CHANGED
@@ -1,19 +1,18 @@
1
1
  /* generated - don't edit */
2
-
3
2
  module.exports = {
4
- version: "17.3.2",
5
- engines: {
6
- node: "^20.12||^22||>=24",
7
- },
8
- supportedTranspilers: {
9
- babel: ">=7.0.0 <8.0.0",
10
- "coffee-script": ">=1.0.0 <2.0.0",
11
- coffeescript: ">=1.0.0 <3.0.0",
12
- livescript: ">=1.0.0 <2.0.0",
13
- svelte: ">=3.0.0 <6.0.0",
14
- swc: ">=1.0.0 <2.0.0",
15
- typescript: ">=2.0.0 <6.0.0",
16
- "vue-template-compiler": ">=2.0.0 <3.0.0",
17
- "@vue/compiler-sfc": ">=3.0.0 <4.0.0",
18
- },
3
+ version: "17.3.3-beta-2",
4
+ engines: {
5
+ node: "^20.12||^22||>=24",
6
+ },
7
+ supportedTranspilers: {
8
+ babel: ">=7.0.0 <8.0.0",
9
+ "coffee-script": ">=1.0.0 <2.0.0",
10
+ coffeescript: ">=1.0.0 <3.0.0",
11
+ livescript: ">=1.0.0 <2.0.0",
12
+ svelte: ">=3.0.0 <6.0.0",
13
+ swc: ">=1.0.0 <2.0.0",
14
+ typescript: ">=2.0.0 <6.0.0",
15
+ "vue-template-compiler": ">=2.0.0 <3.0.0",
16
+ "@vue/compiler-sfc": ">=3.0.0 <4.0.0",
17
+ },
19
18
  };
@@ -2,42 +2,28 @@ import memoize, { memoizeClear } from "memoize";
2
2
  import randomString from "./random-string.mjs";
3
3
 
4
4
  function replace(pElement, pIndex, pWordList) {
5
- return pIndex === 0 ? pWordList.shift() || randomString(pElement) : pElement;
5
+ return pIndex === 0 ? pWordList.shift() || randomString(pElement) : pElement;
6
6
  }
7
7
 
8
8
  const replaceCached = memoize(replace);
9
9
 
10
10
  function replaceFromWordList(pPathElement, pWordList, pCached) {
11
- return pPathElement
12
- .split(".")
13
- .map((pElement, pIndex) =>
14
- pCached
15
- ? replaceCached(pElement, pIndex, pWordList)
16
- : replace(pElement, pIndex, pWordList),
17
- )
18
- .join(".");
11
+ return pPathElement
12
+ .split(".")
13
+ .map((pElement, pIndex) =>
14
+ pCached
15
+ ? replaceCached(pElement, pIndex, pWordList)
16
+ : replace(pElement, pIndex, pWordList),
17
+ )
18
+ .join(".");
19
19
  }
20
20
 
21
21
  /**
22
- * Replaces the passed pPathElement with words from the word list.
23
- * - If the word list is empty use a ('smart') random string (see
24
- * randomString)
25
- * - ... but don't replace if the pPathElement matches the whitelist
26
- * - and only replace up until the first dot in the pattern, so
27
- * extensions get
22
+ * replaces pPathElement with a word from pWordList
28
23
  *
29
- * superSecureThing.ts => abandon.ts
30
- * superSecureThing.spec.ts => abandon.spec.ts
31
- * src/index.ts => src/index.ts // 'src' and 'index' are in the whitelist
32
- * lib/somethingElse.service.js => lib/ability.service.js
24
+ * note: _mutates_ the wordlist to avoid using the same word > 1x
33
25
  *
34
- * To make sure the same input value gets the same output on
35
- * consecutive calls, this function saves the (path element, result)
36
- * pairs in a cache. If you don't want that pass false to the pCached
37
- * parameter
38
- *
39
- * (note: it _removes_ elements from pWordList to prevent duplicates,
40
- * so if the word list is precious to you - pass a clone)
26
+ * See ./anonymize-path-element.md for details
41
27
  *
42
28
  * @param {string} pPathElement the path element to anonymize
43
29
  * @param {string[]} pWordList words to pick from
@@ -46,14 +32,14 @@ function replaceFromWordList(pPathElement, pWordList, pCached) {
46
32
  * @return {string} the path element, anonymized if it isn't whitelisted
47
33
  */
48
34
  export function anonymizePathElement(
49
- pPathElement,
50
- pWordList = [],
51
- pWhiteListRE = /^$/g,
52
- pCached = true,
35
+ pPathElement,
36
+ pWordList = [],
37
+ pWhiteListRE = /^$/g,
38
+ pCached = true,
53
39
  ) {
54
- return pWhiteListRE.test(pPathElement)
55
- ? pPathElement
56
- : replaceFromWordList(pPathElement, pWordList, pCached);
40
+ return pWhiteListRE.test(pPathElement)
41
+ ? pPathElement
42
+ : replaceFromWordList(pPathElement, pWordList, pCached);
57
43
  }
58
44
 
59
45
  /**
@@ -63,5 +49,5 @@ export function anonymizePathElement(
63
49
  * @returns {void}
64
50
  */
65
51
  export function clearCache() {
66
- memoizeClear(replaceCached);
52
+ memoizeClear(replaceCached);
67
53
  }
@@ -1,8 +1,8 @@
1
1
  import { anonymizePathElement } from "./anonymize-path-element.mjs";
2
2
 
3
3
  export const WHITELIST_RE =
4
- // eslint-disable-next-line security/detect-unsafe-regex
5
- /^(?:[.]+|~|bin|apps?|cli|src|libs?|configs?|components?|fixtures?|helpers?|i18n|index\.(?:jsx?|[mc]js|d\.ts|tsx?|vue|coffee|ls)|_?_?mocks?_?_?|node_modules|packages?|package\.json|scripts?|services?|sources?|specs?|_?_?tests?_?_?|types?|uti?ls?|tools)$/;
4
+ // eslint-disable-next-line security/detect-unsafe-regex
5
+ /^(?:[.]+|~|bin|apps?|cli|src|libs?|configs?|components?|fixtures?|helpers?|i18n|index\.(?:jsx?|[mc]js|d\.ts|tsx?|vue|coffee|ls)|_?_?mocks?_?_?|node_modules|packages?|package\.json|scripts?|services?|sources?|specs?|_?_?tests?_?_?|types?|uti?ls?|tools)$/;
6
6
 
7
7
  /**
8
8
  * Kind of smartly anonymizes paths, by
@@ -22,14 +22,14 @@ export const WHITELIST_RE =
22
22
  * @returns {string} - anonymized path
23
23
  */
24
24
  export function anonymizePath(
25
- pPath,
26
- pWordList = [],
27
- pWhiteListRE = WHITELIST_RE,
25
+ pPath,
26
+ pWordList = [],
27
+ pWhiteListRE = WHITELIST_RE,
28
28
  ) {
29
- return pPath
30
- .split("/")
31
- .map((pPathElement) =>
32
- anonymizePathElement(pPathElement, pWordList, pWhiteListRE),
33
- )
34
- .join("/");
29
+ return pPath
30
+ .split("/")
31
+ .map((pPathElement) =>
32
+ anonymizePathElement(pPathElement, pWordList, pWhiteListRE),
33
+ )
34
+ .join("/");
35
35
  }
@@ -3,46 +3,46 @@ import { anonymizePath, WHITELIST_RE } from "./anonymize-path.mjs";
3
3
  const EOL = "\n";
4
4
 
5
5
  function anonymizePathArray(pPathArray, pWordList) {
6
- // the coverage ignore is here because the || [] branch isn't taken when running
7
- // tests and with the current setup of the anonymize module that's not going
8
- // to change. Still want to keep the branch from robustness perspective though.
9
- /* c8 ignore next 1 */
10
- return (pPathArray || []).map((pPath) => anonymizePath(pPath, pWordList));
6
+ // coverage ignore: the || [] branch isn't taken when running tests. With the
7
+ // current setup of the anonymize module that won't change.
8
+ // We keep the branch for robustness though.
9
+ /* c8 ignore next 1 */
10
+ return (pPathArray || []).map((pPath) => anonymizePath(pPath, pWordList));
11
11
  }
12
12
 
13
13
  function anonymizeMiniDependencyArray(
14
- pMiniDependencyArray,
15
- pWordList,
16
- pAttribute = "name",
14
+ pMiniDependencyArray,
15
+ pWordList,
16
+ pAttribute = "name",
17
17
  ) {
18
- return (pMiniDependencyArray || []).map((pMiniDependency) => ({
19
- ...pMiniDependency,
20
- [pAttribute]: anonymizePath(pMiniDependency.name, pWordList),
21
- }));
18
+ return (pMiniDependencyArray || []).map((pMiniDependency) => ({
19
+ ...pMiniDependency,
20
+ [pAttribute]: anonymizePath(pMiniDependency.name, pWordList),
21
+ }));
22
22
  }
23
23
 
24
24
  function anonymizeDependencies(pDependencies, pWordList) {
25
- return pDependencies.map((pDependency) => ({
26
- ...pDependency,
27
- resolved: anonymizePath(pDependency.resolved, pWordList),
28
- module: anonymizePath(pDependency.module, pWordList),
29
- cycle: anonymizeMiniDependencyArray(pDependency.cycle, pWordList),
30
- }));
25
+ return pDependencies.map((pDependency) => ({
26
+ ...pDependency,
27
+ resolved: anonymizePath(pDependency.resolved, pWordList),
28
+ module: anonymizePath(pDependency.module, pWordList),
29
+ cycle: anonymizeMiniDependencyArray(pDependency.cycle, pWordList),
30
+ }));
31
31
  }
32
32
 
33
33
  function anonymizeReachesModule(pWordList) {
34
- return (pModule) => ({
35
- ...pModule,
36
- source: anonymizePath(pModule.source, pWordList),
37
- via: anonymizeMiniDependencyArray(pModule.via, pWordList),
38
- });
34
+ return (pModule) => ({
35
+ ...pModule,
36
+ source: anonymizePath(pModule.source, pWordList),
37
+ via: anonymizeMiniDependencyArray(pModule.via, pWordList),
38
+ });
39
39
  }
40
40
 
41
41
  function anonymizeReaches(pReachesArray, pWordList) {
42
- return pReachesArray.map((pReaches) => ({
43
- ...pReaches,
44
- modules: pReaches.modules.map(anonymizeReachesModule(pWordList)),
45
- }));
42
+ return pReachesArray.map((pReaches) => ({
43
+ ...pReaches,
44
+ modules: pReaches.modules.map(anonymizeReachesModule(pWordList)),
45
+ }));
46
46
  }
47
47
 
48
48
  /**
@@ -52,24 +52,24 @@ function anonymizeReaches(pReachesArray, pWordList) {
52
52
  * @returns {import("../../../types/cruise-result.mjs").IModule[]}
53
53
  */
54
54
  function anonymizeModules(pModules, pWordList) {
55
- return pModules.map((pModule) => {
56
- const lReturnValue = {
57
- ...pModule,
58
- dependencies: anonymizeDependencies(pModule.dependencies, pWordList),
59
- source: anonymizePath(pModule.source, pWordList),
60
- };
61
- if (pModule.dependents) {
62
- lReturnValue.dependents = anonymizePathArray(
63
- pModule.dependents,
64
- pWordList,
65
- );
66
- }
67
- if (pModule.reaches) {
68
- lReturnValue.reaches = anonymizeReaches(pModule.reaches, pWordList);
69
- }
55
+ return pModules.map((pModule) => {
56
+ const lReturnValue = {
57
+ ...pModule,
58
+ dependencies: anonymizeDependencies(pModule.dependencies, pWordList),
59
+ source: anonymizePath(pModule.source, pWordList),
60
+ };
61
+ if (pModule.dependents) {
62
+ lReturnValue.dependents = anonymizePathArray(
63
+ pModule.dependents,
64
+ pWordList,
65
+ );
66
+ }
67
+ if (pModule.reaches) {
68
+ lReturnValue.reaches = anonymizeReaches(pModule.reaches, pWordList);
69
+ }
70
70
 
71
- return lReturnValue;
72
- });
71
+ return lReturnValue;
72
+ });
73
73
  }
74
74
  /**
75
75
  *
@@ -78,52 +78,52 @@ function anonymizeModules(pModules, pWordList) {
78
78
  * @returns {import("../../../types/cruise-result.mjs").IFolder[]}
79
79
  */
80
80
  function anonymizeFolders(pFolders, pWordList) {
81
- return pFolders.map((pFolder) => {
82
- const lReturnValue = {
83
- ...pFolder,
84
- name: anonymizePath(pFolder.name, pWordList),
85
- };
86
- if (pFolder.dependencies) {
87
- lReturnValue.dependencies = pFolder.dependencies.map((pDependency) => {
88
- const lReturnDependencies = {
89
- ...pDependency,
90
- name: anonymizePath(pDependency.name, pWordList),
91
- };
92
- if (lReturnDependencies.cycle) {
93
- lReturnDependencies.cycle = anonymizeMiniDependencyArray(
94
- pDependency.cycle,
95
- pWordList,
96
- );
97
- }
98
- return lReturnDependencies;
99
- });
100
- }
101
- if (pFolder.dependents) {
102
- lReturnValue.dependents = pFolder.dependents.map((pDependent) => ({
103
- ...pDependent,
104
- name: anonymizePath(pDependent.name, pWordList),
105
- }));
106
- }
107
- return lReturnValue;
108
- });
81
+ return pFolders.map((pFolder) => {
82
+ const lReturnValue = {
83
+ ...pFolder,
84
+ name: anonymizePath(pFolder.name, pWordList),
85
+ };
86
+ if (pFolder.dependencies) {
87
+ lReturnValue.dependencies = pFolder.dependencies.map((pDependency) => {
88
+ const lReturnDependencies = {
89
+ ...pDependency,
90
+ name: anonymizePath(pDependency.name, pWordList),
91
+ };
92
+ if (lReturnDependencies.cycle) {
93
+ lReturnDependencies.cycle = anonymizeMiniDependencyArray(
94
+ pDependency.cycle,
95
+ pWordList,
96
+ );
97
+ }
98
+ return lReturnDependencies;
99
+ });
100
+ }
101
+ if (pFolder.dependents) {
102
+ lReturnValue.dependents = pFolder.dependents.map((pDependent) => ({
103
+ ...pDependent,
104
+ name: anonymizePath(pDependent.name, pWordList),
105
+ }));
106
+ }
107
+ return lReturnValue;
108
+ });
109
109
  }
110
110
 
111
111
  function anonymizeViolations(pViolations, pWordList) {
112
- return pViolations.map((pViolation) => {
113
- const lReturnValue = {
114
- ...pViolation,
115
- from: anonymizePath(pViolation.from, pWordList),
116
- to: anonymizePath(pViolation.to, pWordList),
117
- cycle: anonymizeMiniDependencyArray(pViolation.cycle, pWordList),
118
- };
119
- if (pViolation.via) {
120
- lReturnValue.via = anonymizeMiniDependencyArray(
121
- pViolation.via,
122
- pWordList,
123
- );
124
- }
125
- return lReturnValue;
126
- });
112
+ return pViolations.map((pViolation) => {
113
+ const lReturnValue = {
114
+ ...pViolation,
115
+ from: anonymizePath(pViolation.from, pWordList),
116
+ to: anonymizePath(pViolation.to, pWordList),
117
+ cycle: anonymizeMiniDependencyArray(pViolation.cycle, pWordList),
118
+ };
119
+ if (pViolation.via) {
120
+ lReturnValue.via = anonymizeMiniDependencyArray(
121
+ pViolation.via,
122
+ pWordList,
123
+ );
124
+ }
125
+ return lReturnValue;
126
+ });
127
127
  }
128
128
  /**
129
129
  *
@@ -132,25 +132,25 @@ function anonymizeViolations(pViolations, pWordList) {
132
132
  * @returns {import("../../../types/cruise-result.mjs").ICruiseResult}
133
133
  */
134
134
  function anonymize(pResults, pWordList) {
135
- const lResults = structuredClone(pResults);
135
+ const lResults = structuredClone(pResults);
136
136
 
137
- lResults.modules = anonymizeModules(lResults.modules, pWordList);
138
- if (lResults.folders) {
139
- lResults.folders = anonymizeFolders(lResults.folders, pWordList);
140
- }
141
- lResults.summary.violations = anonymizeViolations(
142
- lResults.summary.violations,
143
- pWordList,
144
- );
137
+ lResults.modules = anonymizeModules(lResults.modules, pWordList);
138
+ if (lResults.folders) {
139
+ lResults.folders = anonymizeFolders(lResults.folders, pWordList);
140
+ }
141
+ lResults.summary.violations = anonymizeViolations(
142
+ lResults.summary.violations,
143
+ pWordList,
144
+ );
145
145
 
146
- return lResults;
146
+ return lResults;
147
147
  }
148
148
 
149
149
  function sanitizeWordList(pWordList) {
150
- return pWordList
151
- .map((pString) => pString.replace(/[^a-zA-Z-]/g, "_"))
152
- .filter((pString) => pString.match(/^[a-zA-Z-_]+$/g))
153
- .filter((pString) => !pString.match(WHITELIST_RE));
150
+ return pWordList
151
+ .map((pString) => pString.replace(/[^a-zA-Z-]/g, "_"))
152
+ .filter((pString) => pString.match(/^[a-zA-Z-_]+$/g))
153
+ .filter((pString) => !pString.match(WHITELIST_RE));
154
154
  }
155
155
 
156
156
  /**
@@ -176,22 +176,22 @@ function sanitizeWordList(pWordList) {
176
176
  * exitCode: 0
177
177
  */
178
178
  export default function reportAnonymous(pResults, pAnonymousReporterOptions) {
179
- /** @type {{wordlist?: String[]}} */
180
- let lAnonymousReporterOptions = pAnonymousReporterOptions || {};
181
- if (!lAnonymousReporterOptions.wordlist) {
182
- lAnonymousReporterOptions.wordlist =
183
- pResults?.summary?.optionsUsed?.reporterOptions?.anon?.wordlist ?? [];
184
- }
185
- return {
186
- output:
187
- JSON.stringify(
188
- anonymize(
189
- pResults,
190
- sanitizeWordList(lAnonymousReporterOptions.wordlist),
191
- ),
192
- null,
193
- " ",
194
- ) + EOL,
195
- exitCode: 0,
196
- };
179
+ /** @type {{wordlist?: String[]}} */
180
+ let lAnonymousReporterOptions = pAnonymousReporterOptions || {};
181
+ if (!lAnonymousReporterOptions.wordlist) {
182
+ lAnonymousReporterOptions.wordlist =
183
+ pResults?.summary?.optionsUsed?.reporterOptions?.anon?.wordlist ?? [];
184
+ }
185
+ return {
186
+ output:
187
+ JSON.stringify(
188
+ anonymize(
189
+ pResults,
190
+ sanitizeWordList(lAnonymousReporterOptions.wordlist),
191
+ ),
192
+ null,
193
+ " ",
194
+ ) + EOL,
195
+ exitCode: 0,
196
+ };
197
197
  }