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
@@ -2,9 +2,9 @@
2
2
  import { readFile, mkdir, writeFile } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import {
5
- brotliCompressSync,
6
- brotliDecompressSync,
7
- constants as zlibConstants,
5
+ brotliCompressSync,
6
+ brotliDecompressSync,
7
+ constants as zlibConstants,
8
8
  } from "node:zlib";
9
9
  import { optionsAreCompatible } from "./options-compatible.mjs";
10
10
  import MetadataStrategy from "./metadata-strategy.mjs";
@@ -20,16 +20,16 @@ import { bus } from "#utl/bus.mjs";
20
20
 
21
21
  const CACHE_FILE_NAME = "cache.json";
22
22
  const EMPTY_CACHE = {
23
- modules: [],
24
- summary: {
25
- error: 0,
26
- warn: 0,
27
- info: 0,
28
- ignore: 0,
29
- totalCruised: 0,
30
- violations: [],
31
- optionsUsed: {},
32
- },
23
+ modules: [],
24
+ summary: {
25
+ error: 0,
26
+ warn: 0,
27
+ info: 0,
28
+ ignore: 0,
29
+ totalCruised: 0,
30
+ violations: [],
31
+ optionsUsed: {},
32
+ },
33
33
  };
34
34
  // Bump this to the current major.minor version when the cache format changes in
35
35
  // a way that's not backwards compatible.
@@ -44,137 +44,137 @@ const EMPTY_CACHE = {
44
44
  const CACHE_FORMAT_VERSION = 16.2;
45
45
 
46
46
  export default class Cache {
47
- #revisionData;
48
- #cacheStrategy;
49
- #compress;
50
- /**
51
- * @param {cacheStrategyType=} pCacheStrategy
52
- * @param {boolean=} pCompress
53
- */
54
- constructor(pCacheStrategy, pCompress) {
55
- this.#revisionData = null;
56
- this.#cacheStrategy =
57
- pCacheStrategy === "content"
58
- ? new ContentStrategy()
59
- : new MetadataStrategy();
60
- this.#compress = pCompress ?? false;
61
- }
47
+ #revisionData;
48
+ #cacheStrategy;
49
+ #compress;
50
+ /**
51
+ * @param {cacheStrategyType=} pCacheStrategy
52
+ * @param {boolean=} pCompress
53
+ */
54
+ constructor(pCacheStrategy, pCompress) {
55
+ this.#revisionData = null;
56
+ this.#cacheStrategy =
57
+ pCacheStrategy === "content"
58
+ ? new ContentStrategy()
59
+ : new MetadataStrategy();
60
+ this.#compress = pCompress ?? false;
61
+ }
62
62
 
63
- cacheFormatVersionCompatible(pCachedCruiseResult) {
64
- return (
65
- (pCachedCruiseResult?.revisionData?.cacheFormatVersion ?? 1) >=
66
- CACHE_FORMAT_VERSION
67
- );
68
- }
63
+ cacheFormatVersionCompatible(pCachedCruiseResult) {
64
+ return (
65
+ (pCachedCruiseResult?.revisionData?.cacheFormatVersion ?? 1) >=
66
+ CACHE_FORMAT_VERSION
67
+ );
68
+ }
69
69
 
70
- /**
71
- * @param {IStrictCruiseOptions} pCruiseOptions
72
- * @param {ICruiseResult} pCachedCruiseResult
73
- * @param {IRevisionData=} pRevisionData
74
- * @returns {Promise<boolean>}
75
- */
76
- async canServeFromCache(pCruiseOptions, pCachedCruiseResult, pRevisionData) {
77
- this.#revisionData =
78
- pRevisionData ??
79
- (await this.#cacheStrategy.getRevisionData(
80
- ".",
81
- pCachedCruiseResult,
82
- pCruiseOptions,
83
- {
84
- extensions: new Set(
85
- scannableExtensions.concat(pCruiseOptions.extraExtensionsToScan),
86
- ),
87
- },
88
- ));
89
- this.#revisionData.cacheFormatVersion = CACHE_FORMAT_VERSION;
90
- bus.debug("cache: - compare");
91
- return (
92
- this.cacheFormatVersionCompatible(pCachedCruiseResult) &&
93
- this.#cacheStrategy.revisionDataEqual(
94
- pCachedCruiseResult.revisionData,
95
- this.#revisionData,
96
- ) &&
97
- optionsAreCompatible(
98
- pCachedCruiseResult.summary.optionsUsed,
99
- pCruiseOptions,
100
- )
101
- );
102
- }
70
+ /**
71
+ * @param {IStrictCruiseOptions} pCruiseOptions
72
+ * @param {ICruiseResult} pCachedCruiseResult
73
+ * @param {IRevisionData=} pRevisionData
74
+ * @returns {Promise<boolean>}
75
+ */
76
+ async canServeFromCache(pCruiseOptions, pCachedCruiseResult, pRevisionData) {
77
+ this.#revisionData =
78
+ pRevisionData ??
79
+ (await this.#cacheStrategy.getRevisionData(
80
+ ".",
81
+ pCachedCruiseResult,
82
+ pCruiseOptions,
83
+ {
84
+ extensions: new Set(
85
+ scannableExtensions.concat(pCruiseOptions.extraExtensionsToScan),
86
+ ),
87
+ },
88
+ ));
89
+ this.#revisionData.cacheFormatVersion = CACHE_FORMAT_VERSION;
90
+ bus.debug("cache: - compare");
91
+ return (
92
+ this.cacheFormatVersionCompatible(pCachedCruiseResult) &&
93
+ this.#cacheStrategy.revisionDataEqual(
94
+ pCachedCruiseResult.revisionData,
95
+ this.#revisionData,
96
+ ) &&
97
+ optionsAreCompatible(
98
+ pCachedCruiseResult.summary.optionsUsed,
99
+ pCruiseOptions,
100
+ )
101
+ );
102
+ }
103
103
 
104
- /**
105
- * @param {string} pCacheFolder
106
- * @returns {Promise<ICruiseResult>}
107
- */
108
- async read(pCacheFolder) {
109
- try {
110
- let lPayload = "";
111
- if (this.#compress === true) {
112
- const lCompressedPayload = await readFile(
113
- join(pCacheFolder, CACHE_FILE_NAME),
114
- );
115
- const lPayloadAsBuffer = brotliDecompressSync(lCompressedPayload);
116
- lPayload = lPayloadAsBuffer.toString("utf8");
117
- } else {
118
- lPayload = await readFile(join(pCacheFolder, CACHE_FILE_NAME), "utf8");
119
- }
120
- return JSON.parse(lPayload);
121
- } catch (pError) {
122
- return EMPTY_CACHE;
123
- }
124
- }
104
+ /**
105
+ * @param {string} pCacheFolder
106
+ * @returns {Promise<ICruiseResult>}
107
+ */
108
+ async read(pCacheFolder) {
109
+ try {
110
+ let lPayload = "";
111
+ if (this.#compress === true) {
112
+ const lCompressedPayload = await readFile(
113
+ join(pCacheFolder, CACHE_FILE_NAME),
114
+ );
115
+ const lPayloadAsBuffer = brotliDecompressSync(lCompressedPayload);
116
+ lPayload = lPayloadAsBuffer.toString("utf8");
117
+ } else {
118
+ lPayload = await readFile(join(pCacheFolder, CACHE_FILE_NAME), "utf8");
119
+ }
120
+ return JSON.parse(lPayload);
121
+ } catch (pError) {
122
+ return EMPTY_CACHE;
123
+ }
124
+ }
125
125
 
126
- /**
127
- * @param {string} pPayload
128
- * @param {boolean} pCompress
129
- * @return {Buffer|string}
130
- */
131
- #compact(pPayload, pCompress) {
132
- if (pCompress) {
133
- /**
134
- * we landed on brotli with BROTLI_MIN_QUALITY because:
135
- * - even with BROTLI_MIN_QUALITY it compresses better than gzip
136
- * (regardless of compression level)
137
- * - at BROTLI_MIN_QUALITY it's faster than gzip
138
- * - BROTLI_MAX_QUALITY gives a bit better compression but is _much_
139
- * slower than even gzip
140
- *
141
- * In our situation the sync version is significantly faster than the
142
- * async version + zlib functions need to be promisified before they
143
- * can be used in promises, which will add the to the execution time
144
- * as well.
145
- *
146
- * As sync or async doesn't _really_
147
- * matter for the cli, we're using the sync version here.
148
- */
149
- return brotliCompressSync(pPayload, {
150
- params: {
151
- [zlibConstants.BROTLI_PARAM_QUALITY]:
152
- zlibConstants.BROTLI_MIN_QUALITY,
153
- },
154
- });
155
- }
156
- return pPayload;
157
- }
126
+ /**
127
+ * @param {string} pPayload
128
+ * @param {boolean} pCompress
129
+ * @return {Buffer|string}
130
+ */
131
+ #compact(pPayload, pCompress) {
132
+ if (pCompress) {
133
+ /**
134
+ * we landed on brotli with BROTLI_MIN_QUALITY because:
135
+ * - even with BROTLI_MIN_QUALITY it compresses better than gzip
136
+ * (regardless of compression level)
137
+ * - at BROTLI_MIN_QUALITY it's faster than gzip
138
+ * - BROTLI_MAX_QUALITY gives a bit better compression but is _much_
139
+ * slower than even gzip
140
+ *
141
+ * In our situation the sync version is significantly faster than the
142
+ * async version + zlib functions need to be promisified before they
143
+ * can be used in promises, which will add the to the execution time
144
+ * as well.
145
+ *
146
+ * As sync or async doesn't _really_
147
+ * matter for the cli, we're using the sync version here.
148
+ */
149
+ return brotliCompressSync(pPayload, {
150
+ params: {
151
+ [zlibConstants.BROTLI_PARAM_QUALITY]:
152
+ zlibConstants.BROTLI_MIN_QUALITY,
153
+ },
154
+ });
155
+ }
156
+ return pPayload;
157
+ }
158
158
 
159
- /**
160
- * @param {string} pCacheFolder
161
- * @param {ICruiseResult} pCruiseResult
162
- * @param {IRevisionData=} pRevisionData
163
- */
164
- async write(pCacheFolder, pCruiseResult, pRevisionData) {
165
- let lRevisionData = pRevisionData ?? this.#revisionData;
159
+ /**
160
+ * @param {string} pCacheFolder
161
+ * @param {ICruiseResult} pCruiseResult
162
+ * @param {IRevisionData=} pRevisionData
163
+ */
164
+ async write(pCacheFolder, pCruiseResult, pRevisionData) {
165
+ let lRevisionData = pRevisionData ?? this.#revisionData;
166
166
 
167
- await mkdir(pCacheFolder, { recursive: true });
168
- const lUncompressedPayload = JSON.stringify(
169
- this.#cacheStrategy.prepareRevisionDataForSaving(
170
- pCruiseResult,
171
- lRevisionData,
172
- ),
173
- );
174
- let lPayload = this.#compact(lUncompressedPayload, this.#compress);
167
+ await mkdir(pCacheFolder, { recursive: true });
168
+ const lUncompressedPayload = JSON.stringify(
169
+ this.#cacheStrategy.prepareRevisionDataForSaving(
170
+ pCruiseResult,
171
+ lRevisionData,
172
+ ),
173
+ );
174
+ let lPayload = this.#compact(lUncompressedPayload, this.#compress);
175
175
 
176
- // relying on writeFile defaults to 'do the right thing' (i.e. utf8
177
- // when the payload is a string; raw buffer otherwise)
178
- await writeFile(join(pCacheFolder, CACHE_FILE_NAME), lPayload);
179
- }
176
+ // relying on writeFile defaults to 'do the right thing' (i.e. utf8
177
+ // when the payload is a string; raw buffer otherwise)
178
+ await writeFile(join(pCacheFolder, CACHE_FILE_NAME), lPayload);
179
+ }
180
180
  }
@@ -4,9 +4,9 @@ import { isDeepStrictEqual } from "node:util";
4
4
  import { join } from "node:path/posix";
5
5
  import findContentChanges from "./find-content-changes.mjs";
6
6
  import {
7
- getFileHashSync,
8
- isInterestingChangeType,
9
- moduleIsInterestingForDiff,
7
+ getFileHashSync,
8
+ isInterestingChangeType,
9
+ moduleIsInterestingForDiff,
10
10
  } from "./helpers.mjs";
11
11
 
12
12
  /**
@@ -20,15 +20,15 @@ import {
20
20
  * @returns {(IModule) => IModule}
21
21
  */
22
22
  function addCheckSumToModule(pBaseDirectory) {
23
- return (pModule) => {
24
- if (moduleIsInterestingForDiff(pModule)) {
25
- return {
26
- ...pModule,
27
- checksum: getFileHashSync(join(pBaseDirectory, pModule.source)),
28
- };
29
- }
30
- return pModule;
31
- };
23
+ return (pModule) => {
24
+ if (moduleIsInterestingForDiff(pModule)) {
25
+ return {
26
+ ...pModule,
27
+ checksum: getFileHashSync(join(pBaseDirectory, pModule.source)),
28
+ };
29
+ }
30
+ return pModule;
31
+ };
32
32
  }
33
33
 
34
34
  /**
@@ -37,86 +37,86 @@ function addCheckSumToModule(pBaseDirectory) {
37
37
  * @returns {IRevisionChange[]}
38
38
  */
39
39
  function refreshChanges(pChanges, pModules) {
40
- return pChanges.filter(
41
- (pChange) =>
42
- !pModules.some(
43
- (pModule) =>
44
- pModule.source === pChange.name &&
45
- pModule.checksum === pChange.checksum,
46
- ),
47
- );
40
+ return pChanges.filter(
41
+ (pChange) =>
42
+ !pModules.some(
43
+ (pModule) =>
44
+ pModule.source === pChange.name &&
45
+ pModule.checksum === pChange.checksum,
46
+ ),
47
+ );
48
48
  }
49
49
 
50
50
  export default class ContentStrategy {
51
- /**
52
- * @param {string} pDirectory
53
- * @param {ICruiseResult} pCachedCruiseResult
54
- * @param {IStrictCruiseOptions} pCruiseOptions
55
- * @param {Object} pOptions
56
- * @param {Set<string>} pOptions.extensions
57
- * @param {Set<changeType>=} pOptions.interestingChangeTypes?
58
- * @param {string=} pOptions.baseDir
59
- * @param {typeof findContentChanges=} pOptions.diffListFn
60
- * @param {typeof getSHA=} pOptions.checksumFn
61
- * @returns {IRevisionData}
62
- */
63
- getRevisionData(pDirectory, pCachedCruiseResult, pCruiseOptions, pOptions) {
64
- const lOptions = {
65
- diffListFn: findContentChanges,
66
- baseDir: process.cwd(),
67
- ...pOptions,
68
- };
69
- return {
70
- SHA1: "unknown-in-content-cache-strategy",
71
- changes: /** @type {IRevisionChange[]} */ (
72
- lOptions.diffListFn(pDirectory, pCachedCruiseResult, {
73
- baseDir: lOptions.baseDir,
74
- extensions: lOptions.extensions,
75
- includeOnly: pCruiseOptions.includeOnly,
76
- exclude: pCruiseOptions.exclude,
77
- })
78
- ).filter(isInterestingChangeType(lOptions.interestingChangeTypes)),
79
- };
80
- }
51
+ /**
52
+ * @param {string} pDirectory
53
+ * @param {ICruiseResult} pCachedCruiseResult
54
+ * @param {IStrictCruiseOptions} pCruiseOptions
55
+ * @param {Object} pOptions
56
+ * @param {Set<string>} pOptions.extensions
57
+ * @param {Set<changeType>=} pOptions.interestingChangeTypes?
58
+ * @param {string=} pOptions.baseDir
59
+ * @param {typeof findContentChanges=} pOptions.diffListFn
60
+ * @param {typeof getSHA=} pOptions.checksumFn
61
+ * @returns {IRevisionData}
62
+ */
63
+ getRevisionData(pDirectory, pCachedCruiseResult, pCruiseOptions, pOptions) {
64
+ const lOptions = {
65
+ diffListFn: findContentChanges,
66
+ baseDir: process.cwd(),
67
+ ...pOptions,
68
+ };
69
+ return {
70
+ SHA1: "unknown-in-content-cache-strategy",
71
+ changes: /** @type {IRevisionChange[]} */ (
72
+ lOptions.diffListFn(pDirectory, pCachedCruiseResult, {
73
+ baseDir: lOptions.baseDir,
74
+ extensions: lOptions.extensions,
75
+ includeOnly: pCruiseOptions.includeOnly,
76
+ exclude: pCruiseOptions.exclude,
77
+ })
78
+ ).filter(isInterestingChangeType(lOptions.interestingChangeTypes)),
79
+ };
80
+ }
81
81
 
82
- /**
83
- * @param {IRevisionData=} pExistingRevisionData
84
- * @param {IRevisionData=} pNewRevisionData
85
- * @returns {boolean}
86
- */
87
- revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
88
- return Boolean(
89
- pExistingRevisionData &&
90
- pNewRevisionData &&
91
- // Even though we don't really have a SHA1, it might be the previous version
92
- // of the cache did, e.g. because it was rendered with the metadata cache
93
- // strategy. In that case the SHA1 comparison is a reliable, fast bailout.
94
- pExistingRevisionData.SHA1 === pNewRevisionData.SHA1 &&
95
- isDeepStrictEqual(
96
- pExistingRevisionData.changes,
97
- pNewRevisionData.changes,
98
- ),
99
- );
100
- }
82
+ /**
83
+ * @param {IRevisionData=} pExistingRevisionData
84
+ * @param {IRevisionData=} pNewRevisionData
85
+ * @returns {boolean}
86
+ */
87
+ revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
88
+ return Boolean(
89
+ pExistingRevisionData &&
90
+ pNewRevisionData &&
91
+ // Even though we don't really have a SHA1, it might be the previous version
92
+ // of the cache did, e.g. because it was rendered with the metadata cache
93
+ // strategy. In that case the SHA1 comparison is a reliable, fast bailout.
94
+ pExistingRevisionData.SHA1 === pNewRevisionData.SHA1 &&
95
+ isDeepStrictEqual(
96
+ pExistingRevisionData.changes,
97
+ pNewRevisionData.changes,
98
+ ),
99
+ );
100
+ }
101
101
 
102
- /**
103
- * @param {ICruiseResult} pCruiseResult
104
- * @param {IRevisionData=} pRevisionData
105
- * @returns {ICruiseResult}
106
- */
107
- prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
108
- const lModulesWithCheckSum = pCruiseResult.modules.map(
109
- addCheckSumToModule(pCruiseResult.summary.optionsUsed.baseDir || "."),
110
- );
111
- const lRevisionData = {
112
- ...pRevisionData,
113
- changes: refreshChanges(pRevisionData.changes, lModulesWithCheckSum),
114
- };
102
+ /**
103
+ * @param {ICruiseResult} pCruiseResult
104
+ * @param {IRevisionData=} pRevisionData
105
+ * @returns {ICruiseResult}
106
+ */
107
+ prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
108
+ const lModulesWithCheckSum = pCruiseResult.modules.map(
109
+ addCheckSumToModule(pCruiseResult.summary.optionsUsed.baseDir || "."),
110
+ );
111
+ const lRevisionData = {
112
+ ...pRevisionData,
113
+ changes: refreshChanges(pRevisionData.changes, lModulesWithCheckSum),
114
+ };
115
115
 
116
- return {
117
- ...pCruiseResult,
118
- modules: lModulesWithCheckSum,
119
- revisionData: lRevisionData,
120
- };
121
- }
116
+ return {
117
+ ...pCruiseResult,
118
+ modules: lModulesWithCheckSum,
119
+ revisionData: lRevisionData,
120
+ };
121
+ }
122
122
  }
@@ -2,11 +2,11 @@
2
2
  // @ts-check
3
3
  import { join } from "node:path/posix";
4
4
  import {
5
- getFileHashSync,
6
- excludeFilter,
7
- includeOnlyFilter,
8
- hasInterestingExtension,
9
- moduleIsInterestingForDiff,
5
+ getFileHashSync,
6
+ excludeFilter,
7
+ includeOnlyFilter,
8
+ hasInterestingExtension,
9
+ moduleIsInterestingForDiff,
10
10
  } from "./helpers.mjs";
11
11
  import { bus } from "#utl/bus.mjs";
12
12
  import findAllFiles from "#utl/find-all-files.mjs";
@@ -24,36 +24,36 @@ import findAllFiles from "#utl/find-all-files.mjs";
24
24
  * @returns {(pModule:IModule) => IRevisionChange}
25
25
  */
26
26
  function diffCachedModuleAgainstFileSet(
27
- pFileSet,
28
- pBaseDirectory,
29
- pFileHashFunction = getFileHashSync,
27
+ pFileSet,
28
+ pBaseDirectory,
29
+ pFileHashFunction = getFileHashSync,
30
30
  ) {
31
- return (pModule) => {
32
- if (!moduleIsInterestingForDiff(pModule)) {
33
- return { name: pModule.source, type: "ignored" };
34
- }
31
+ return (pModule) => {
32
+ if (!moduleIsInterestingForDiff(pModule)) {
33
+ return { name: pModule.source, type: "ignored" };
34
+ }
35
35
 
36
- if (!pFileSet.has(pModule.source)) {
37
- return { name: pModule.source, type: "deleted" };
38
- }
36
+ if (!pFileSet.has(pModule.source)) {
37
+ return { name: pModule.source, type: "deleted" };
38
+ }
39
39
 
40
- const lNewCheckSum = pFileHashFunction(
41
- join(pBaseDirectory, pModule.source),
42
- );
43
- if (lNewCheckSum !== pModule.checksum) {
44
- return {
45
- name: pModule.source,
46
- type: "modified",
47
- checksum: lNewCheckSum,
48
- };
49
- }
40
+ const lNewCheckSum = pFileHashFunction(
41
+ join(pBaseDirectory, pModule.source),
42
+ );
43
+ if (lNewCheckSum !== pModule.checksum) {
44
+ return {
45
+ name: pModule.source,
46
+ type: "modified",
47
+ checksum: lNewCheckSum,
48
+ };
49
+ }
50
50
 
51
- return {
52
- name: pModule.source,
53
- type: "unmodified",
54
- checksum: pModule.checksum,
55
- };
56
- };
51
+ return {
52
+ name: pModule.source,
53
+ type: "unmodified",
54
+ checksum: pModule.checksum,
55
+ };
56
+ };
57
57
  }
58
58
 
59
59
  /**
@@ -79,36 +79,36 @@ function diffCachedModuleAgainstFileSet(
79
79
  * @returns {IRevisionChange[]}
80
80
  */
81
81
  export default function findContentChanges(
82
- pDirectory,
83
- pCachedCruiseResult,
84
- pOptions,
82
+ pDirectory,
83
+ pCachedCruiseResult,
84
+ pOptions,
85
85
  ) {
86
- bus.debug("cache: - get revision data");
87
- const lFileSet = new Set(
88
- findAllFiles(pDirectory, {
89
- baseDir: pOptions.baseDir,
90
- excludeFilterFn: excludeFilter(pOptions.exclude),
91
- includeOnlyFilterFn: includeOnlyFilter(pOptions.includeOnly),
92
- }).filter(hasInterestingExtension(pOptions.extensions)),
93
- );
86
+ bus.debug("cache: - get revision data");
87
+ const lFileSet = new Set(
88
+ findAllFiles(pDirectory, {
89
+ baseDir: pOptions.baseDir,
90
+ excludeFilterFn: excludeFilter(pOptions.exclude),
91
+ includeOnlyFilterFn: includeOnlyFilter(pOptions.includeOnly),
92
+ }).filter(hasInterestingExtension(pOptions.extensions)),
93
+ );
94
94
 
95
- bus.debug("cache: - get (cached - new)");
96
- const lDiffCachedVsNew = pCachedCruiseResult.modules.map(
97
- diffCachedModuleAgainstFileSet(lFileSet, pOptions.baseDir),
98
- );
95
+ bus.debug("cache: - get (cached - new)");
96
+ const lDiffCachedVsNew = pCachedCruiseResult.modules.map(
97
+ diffCachedModuleAgainstFileSet(lFileSet, pOptions.baseDir),
98
+ );
99
99
 
100
- bus.debug("cache: - get (new - cached)");
101
- lDiffCachedVsNew.forEach(({ name }) => lFileSet.delete(name));
100
+ bus.debug("cache: - get (new - cached)");
101
+ lDiffCachedVsNew.forEach(({ name }) => lFileSet.delete(name));
102
102
 
103
- const lDiffNewVsCached = [];
104
- for (let lFileName of lFileSet) {
105
- lDiffNewVsCached.push({
106
- name: lFileName,
107
- type: /** @type import('watskeburt').changeType */ ("added"),
108
- checksum: getFileHashSync(join(pOptions.baseDir, lFileName)),
109
- });
110
- }
103
+ const lDiffNewVsCached = [];
104
+ for (const lFileName of lFileSet) {
105
+ lDiffNewVsCached.push({
106
+ name: lFileName,
107
+ type: /** @type import('watskeburt').changeType */ ("added"),
108
+ checksum: getFileHashSync(join(pOptions.baseDir, lFileName)),
109
+ });
110
+ }
111
111
 
112
- bus.debug("cache: - return revision data");
113
- return lDiffCachedVsNew.concat(lDiffNewVsCached);
112
+ bus.debug("cache: - return revision data");
113
+ return lDiffCachedVsNew.concat(lDiffNewVsCached);
114
114
  }