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,170 +1,170 @@
1
1
  // @ts-check
2
2
  import prompts from "prompts";
3
3
  import {
4
- isLikelyMonoRepo,
5
- isTypeModule,
6
- getMonoRepoPackagesCandidates,
7
- getSourceFolderCandidates,
8
- getTestFolderCandidates,
9
- hasJSConfigCandidates,
10
- hasTSConfigCandidates,
11
- hasTestsWithinSource,
12
- toSourceLocationArray,
13
- getJSConfigCandidates,
14
- getTSConfigCandidates,
15
- hasBabelConfigCandidates,
16
- getBabelConfigCandidates,
17
- hasWebpackConfigCandidates,
18
- getWebpackConfigCandidates,
19
- likelyUsesBun,
4
+ isLikelyMonoRepo,
5
+ isTypeModule,
6
+ getMonoRepoPackagesCandidates,
7
+ getSourceFolderCandidates,
8
+ getTestFolderCandidates,
9
+ hasJSConfigCandidates,
10
+ hasTSConfigCandidates,
11
+ hasTestsWithinSource,
12
+ toSourceLocationArray,
13
+ getJSConfigCandidates,
14
+ getTSConfigCandidates,
15
+ hasBabelConfigCandidates,
16
+ getBabelConfigCandidates,
17
+ hasWebpackConfigCandidates,
18
+ getWebpackConfigCandidates,
19
+ likelyUsesBun,
20
20
  } from "./environment-helpers.mjs";
21
21
  import { validateLocation } from "./validators.mjs";
22
22
  import { isAvailable as tscIsAvailable } from "#extract/tsc/parse.mjs";
23
23
 
24
24
  function toPromptChoice(pString) {
25
- return {
26
- title: pString,
27
- value: pString,
28
- };
25
+ return {
26
+ title: pString,
27
+ value: pString,
28
+ };
29
29
  }
30
30
 
31
31
  /** @type {import('prompts').PromptObject[]} */
32
32
  const QUESTIONS = [
33
- {
34
- name: "isMonoRepo",
35
- type: () => (isLikelyMonoRepo() ? "confirm" : false),
36
- message: "This looks like mono repo. Is that correct?",
37
- initial: isLikelyMonoRepo(),
38
- },
39
- {
40
- name: "isTypeModule",
41
- type: () => (isTypeModule() ? "confirm" : false),
42
- message: "It looks like this is an ESM package. Is that correct?",
43
- initial: isTypeModule(),
44
- },
45
- {
46
- name: "sourceLocation",
47
- type: (_, pAnswers) => (pAnswers.isMonoRepo ? "list" : false),
48
- message: "Mono repo it is! Where do your packages live?",
49
- initial: getMonoRepoPackagesCandidates().join(", "),
50
- validate: validateLocation,
51
- },
52
- {
53
- name: "combinedDependencies",
54
- type: (_, pAnswers) => (pAnswers.isMonoRepo ? "confirm" : false),
55
- message:
56
- "Do your packages use dependencies declared in the root of your repo?",
57
- initial: false,
58
- },
59
- {
60
- name: "sourceLocation",
61
- type: (_, pAnswers) => (pAnswers.isMonoRepo ? false : "list"),
62
- message: "Where do your source files live?",
63
- initial: getSourceFolderCandidates().join(", "),
64
- validate: validateLocation,
65
- },
66
- {
67
- name: "hasTestsOutsideSource",
68
- type: (_, pAnswers) => (pAnswers.isMonoRepo ? false : "confirm"),
69
- message: "Do your test files live in a separate folder?",
70
- initial: (_, pAnswers) => {
71
- return !hasTestsWithinSource(
72
- getTestFolderCandidates(),
73
- toSourceLocationArray(pAnswers.sourceLocation),
74
- );
75
- },
76
- },
77
- {
78
- name: "testLocation",
79
- type: (_, pAnswers) =>
80
- pAnswers.hasTestsOutsideSource && !pAnswers.isMonoRepo ? "list" : false,
81
- message: "Where do your test files live?",
82
- initial: getTestFolderCandidates().join(", "),
83
- validate: validateLocation,
84
- },
85
- {
86
- name: "useJsConfig",
87
- type: () =>
88
- hasJSConfigCandidates() && !hasTSConfigCandidates() ? "confirm" : false,
89
- message: "Looks like you're using a 'jsconfig.json'. Use that?",
90
- initial: true,
91
- },
92
- {
93
- name: "jsConfig",
94
- type: (_, pAnswers) => (pAnswers.useJsConfig ? "select" : false),
95
- message: "Full path to your 'jsconfig.json",
96
- choices: getJSConfigCandidates().map((pCandidate) => ({
97
- title: pCandidate,
98
- value: pCandidate,
99
- })),
100
- },
101
- {
102
- name: "useTsConfig",
103
- type: () => (hasTSConfigCandidates() ? "confirm" : false),
104
- message: "Looks like you're using a 'tsconfig.json'. Use that?",
105
- initial: true,
106
- },
107
- {
108
- name: "tsConfig",
109
- type: (_, pAnswers) => (pAnswers.useTsConfig ? "select" : false),
110
- message: "Full path to your 'tsconfig.json",
111
- choices: getTSConfigCandidates().map(toPromptChoice),
112
- },
113
- {
114
- name: "detectJSDocImports",
115
- type: () => (tscIsAvailable() ? "confirm" : false),
116
- message: "Do you want to detect JSDoc imports (slightly slower)?",
117
- initial: false,
118
- },
119
- {
120
- name: "detectProcessBuiltinModuleCalls",
121
- type: "confirm",
122
- message:
123
- "Do you want to detect process.getBuiltinModule imports (slightly slower)?",
124
- initial: true,
125
- },
126
- {
127
- name: "tsPreCompilationDeps",
128
- type: (_, pAnswers) => (pAnswers.useTsConfig ? "confirm" : false),
129
- message:
130
- "Also regard TypeScript dependencies that exist only before compilation?",
131
- initial: true,
132
- },
133
- {
134
- name: "useBabelConfig",
135
- type: () => (hasBabelConfigCandidates() ? "confirm" : false),
136
- message: "Looks like you're using Babel. Use a babel config?",
137
- initial: true,
138
- },
139
- {
140
- name: "babelConfig",
141
- type: (_, pAnswers) => (pAnswers.useBabelConfig ? "select" : false),
142
- message: "Full path to your babel config:",
143
- choices: getBabelConfigCandidates().map(toPromptChoice),
144
- },
145
- {
146
- name: "useWebPackConfig",
147
- type: () => (hasWebpackConfigCandidates() ? "confirm" : false),
148
- message: "Looks like you're using webpack - specify a webpack config?",
149
- initial: true,
150
- },
151
- {
152
- name: "webpackConfig",
153
- type: (_, pAnswers) => (pAnswers.useWebpackConfig ? "select" : false),
154
- message: "Full path to your webpack config:",
155
- choices: getWebpackConfigCandidates().map(toPromptChoice),
156
- },
157
- {
158
- name: "usesBun",
159
- type: () => (likelyUsesBun() ? "confirm" : false),
160
- message: "Looks like you're using bun. Detect its builtins?",
161
- initial: true,
162
- },
33
+ {
34
+ name: "isMonoRepo",
35
+ type: () => (isLikelyMonoRepo() ? "confirm" : false),
36
+ message: "This looks like mono repo. Is that correct?",
37
+ initial: isLikelyMonoRepo(),
38
+ },
39
+ {
40
+ name: "isTypeModule",
41
+ type: () => (isTypeModule() ? "confirm" : false),
42
+ message: "It looks like this is an ESM package. Is that correct?",
43
+ initial: isTypeModule(),
44
+ },
45
+ {
46
+ name: "sourceLocation",
47
+ type: (_, pAnswers) => (pAnswers.isMonoRepo ? "list" : false),
48
+ message: "Mono repo it is! Where do your packages live?",
49
+ initial: getMonoRepoPackagesCandidates().join(", "),
50
+ validate: validateLocation,
51
+ },
52
+ {
53
+ name: "combinedDependencies",
54
+ type: (_, pAnswers) => (pAnswers.isMonoRepo ? "confirm" : false),
55
+ message:
56
+ "Do your packages use dependencies declared in the root of your repo?",
57
+ initial: false,
58
+ },
59
+ {
60
+ name: "sourceLocation",
61
+ type: (_, pAnswers) => (pAnswers.isMonoRepo ? false : "list"),
62
+ message: "Where do your source files live?",
63
+ initial: getSourceFolderCandidates().join(", "),
64
+ validate: validateLocation,
65
+ },
66
+ {
67
+ name: "hasTestsOutsideSource",
68
+ type: (_, pAnswers) => (pAnswers.isMonoRepo ? false : "confirm"),
69
+ message: "Do your test files live in a separate folder?",
70
+ initial: (_, pAnswers) => {
71
+ return !hasTestsWithinSource(
72
+ getTestFolderCandidates(),
73
+ toSourceLocationArray(pAnswers.sourceLocation),
74
+ );
75
+ },
76
+ },
77
+ {
78
+ name: "testLocation",
79
+ type: (_, pAnswers) =>
80
+ pAnswers.hasTestsOutsideSource && !pAnswers.isMonoRepo ? "list" : false,
81
+ message: "Where do your test files live?",
82
+ initial: getTestFolderCandidates().join(", "),
83
+ validate: validateLocation,
84
+ },
85
+ {
86
+ name: "useJsConfig",
87
+ type: () =>
88
+ hasJSConfigCandidates() && !hasTSConfigCandidates() ? "confirm" : false,
89
+ message: "Looks like you're using a 'jsconfig.json'. Use that?",
90
+ initial: true,
91
+ },
92
+ {
93
+ name: "jsConfig",
94
+ type: (_, pAnswers) => (pAnswers.useJsConfig ? "select" : false),
95
+ message: "Full path to your 'jsconfig.json",
96
+ choices: getJSConfigCandidates().map((pCandidate) => ({
97
+ title: pCandidate,
98
+ value: pCandidate,
99
+ })),
100
+ },
101
+ {
102
+ name: "useTsConfig",
103
+ type: () => (hasTSConfigCandidates() ? "confirm" : false),
104
+ message: "Looks like you're using a 'tsconfig.json'. Use that?",
105
+ initial: true,
106
+ },
107
+ {
108
+ name: "tsConfig",
109
+ type: (_, pAnswers) => (pAnswers.useTsConfig ? "select" : false),
110
+ message: "Full path to your 'tsconfig.json",
111
+ choices: getTSConfigCandidates().map(toPromptChoice),
112
+ },
113
+ {
114
+ name: "detectJSDocImports",
115
+ type: () => (tscIsAvailable() ? "confirm" : false),
116
+ message: "Do you want to detect JSDoc imports (slightly slower)?",
117
+ initial: false,
118
+ },
119
+ {
120
+ name: "detectProcessBuiltinModuleCalls",
121
+ type: "confirm",
122
+ message:
123
+ "Do you want to detect process.getBuiltinModule imports (slightly slower)?",
124
+ initial: true,
125
+ },
126
+ {
127
+ name: "tsPreCompilationDeps",
128
+ type: (_, pAnswers) => (pAnswers.useTsConfig ? "confirm" : false),
129
+ message:
130
+ "Also regard TypeScript dependencies that exist only before compilation?",
131
+ initial: true,
132
+ },
133
+ {
134
+ name: "useBabelConfig",
135
+ type: () => (hasBabelConfigCandidates() ? "confirm" : false),
136
+ message: "Looks like you're using Babel. Use a babel config?",
137
+ initial: true,
138
+ },
139
+ {
140
+ name: "babelConfig",
141
+ type: (_, pAnswers) => (pAnswers.useBabelConfig ? "select" : false),
142
+ message: "Full path to your babel config:",
143
+ choices: getBabelConfigCandidates().map(toPromptChoice),
144
+ },
145
+ {
146
+ name: "useWebPackConfig",
147
+ type: () => (hasWebpackConfigCandidates() ? "confirm" : false),
148
+ message: "Looks like you're using webpack - specify a webpack config?",
149
+ initial: true,
150
+ },
151
+ {
152
+ name: "webpackConfig",
153
+ type: (_, pAnswers) => (pAnswers.useWebpackConfig ? "select" : false),
154
+ message: "Full path to your webpack config:",
155
+ choices: getWebpackConfigCandidates().map(toPromptChoice),
156
+ },
157
+ {
158
+ name: "usesBun",
159
+ type: () => (likelyUsesBun() ? "confirm" : false),
160
+ message: "Looks like you're using bun. Detect its builtins?",
161
+ initial: true,
162
+ },
163
163
  ];
164
164
 
165
165
  /**
166
166
  * @return {Promise<import("./types").IPartialInitConfig>}
167
167
  */
168
168
  export default function getUserInput() {
169
- return prompts(QUESTIONS);
169
+ return prompts(QUESTIONS);
170
170
  }
@@ -5,19 +5,19 @@ import buildConfig from "./build-config.mjs";
5
5
  import writeConfig from "./write-config.mjs";
6
6
  import getUserInput from "./get-user-input.mjs";
7
7
  import {
8
- isLikelyMonoRepo,
9
- fileExists,
10
- hasBabelConfigCandidates,
11
- getBabelConfigCandidates,
12
- hasWebpackConfigCandidates,
13
- getWebpackConfigCandidates,
14
- hasTSConfigCandidates,
15
- getTSConfigCandidates,
16
- getDefaultConfigFileName,
17
- hasJSConfigCandidates,
18
- getJSConfigCandidates,
19
- likelyUsesBun,
20
- isTypeModule,
8
+ isLikelyMonoRepo,
9
+ fileExists,
10
+ hasBabelConfigCandidates,
11
+ getBabelConfigCandidates,
12
+ hasWebpackConfigCandidates,
13
+ getWebpackConfigCandidates,
14
+ hasTSConfigCandidates,
15
+ getTSConfigCandidates,
16
+ getDefaultConfigFileName,
17
+ hasJSConfigCandidates,
18
+ getJSConfigCandidates,
19
+ likelyUsesBun,
20
+ isTypeModule,
21
21
  } from "./environment-helpers.mjs";
22
22
  import { writeRunScriptsToManifest } from "./write-run-scripts-to-manifest.mjs";
23
23
 
@@ -35,38 +35,38 @@ const PACKAGE_MANIFEST = `./${_PACKAGE_MANIFEST}`;
35
35
  * @return {IPartialInitConfig} an initialization configuration
36
36
  */
37
37
  function getOneShotConfig(pOneShotConfigId) {
38
- /** @type {IPartialInitConfig} */
39
- const lBaseConfig = {
40
- isMonoRepo: isLikelyMonoRepo(),
41
- isTypeModule: isTypeModule(),
42
- combinedDependencies: false,
43
- useJsConfig: hasJSConfigCandidates() && !hasTSConfigCandidates(),
44
- jsConfig: getJSConfigCandidates().shift(),
45
- useTsConfig: hasTSConfigCandidates(),
46
- tsConfig: getTSConfigCandidates().shift(),
47
- detectJSDocImports: false,
48
- detectProcessBuiltinModuleCalls: true,
49
- tsPreCompilationDeps: hasTSConfigCandidates(),
50
- useWebpackConfig: hasWebpackConfigCandidates(),
51
- webpackConfig: getWebpackConfigCandidates().shift(),
52
- useBabelConfig: hasBabelConfigCandidates(),
53
- babelConfig: getBabelConfigCandidates().shift(),
54
- specifyResolutionExtensions: true,
55
- usesBun: likelyUsesBun(),
56
- };
57
- /** @type {Map<OneShotConfigIDType, IPartialInitConfig>} */
58
- const lOneShotConfigs = new Map([
59
- ["yes", lBaseConfig],
60
- [
61
- "x-scripts",
62
- {
63
- updateManifest: fileExists(PACKAGE_MANIFEST),
64
- ...lBaseConfig,
65
- },
66
- ],
67
- ]);
38
+ /** @type {IPartialInitConfig} */
39
+ const lBaseConfig = {
40
+ isMonoRepo: isLikelyMonoRepo(),
41
+ isTypeModule: isTypeModule(),
42
+ combinedDependencies: false,
43
+ useJsConfig: hasJSConfigCandidates() && !hasTSConfigCandidates(),
44
+ jsConfig: getJSConfigCandidates().shift(),
45
+ useTsConfig: hasTSConfigCandidates(),
46
+ tsConfig: getTSConfigCandidates().shift(),
47
+ detectJSDocImports: false,
48
+ detectProcessBuiltinModuleCalls: true,
49
+ tsPreCompilationDeps: hasTSConfigCandidates(),
50
+ useWebpackConfig: hasWebpackConfigCandidates(),
51
+ webpackConfig: getWebpackConfigCandidates().shift(),
52
+ useBabelConfig: hasBabelConfigCandidates(),
53
+ babelConfig: getBabelConfigCandidates().shift(),
54
+ specifyResolutionExtensions: true,
55
+ usesBun: likelyUsesBun(),
56
+ };
57
+ /** @type {Map<OneShotConfigIDType, IPartialInitConfig>} */
58
+ const lOneShotConfigs = new Map([
59
+ ["yes", lBaseConfig],
60
+ [
61
+ "x-scripts",
62
+ {
63
+ updateManifest: fileExists(PACKAGE_MANIFEST),
64
+ ...lBaseConfig,
65
+ },
66
+ ],
67
+ ]);
68
68
 
69
- return lOneShotConfigs.get(pOneShotConfigId) || lBaseConfig;
69
+ return lOneShotConfigs.get(pOneShotConfigId) || lBaseConfig;
70
70
  }
71
71
 
72
72
  /**
@@ -74,10 +74,10 @@ function getOneShotConfig(pOneShotConfigId) {
74
74
  * @param {IInitConfig} pNormalizedInitConfig
75
75
  */
76
76
  function manifestIsUpdatable(pNormalizedInitConfig) {
77
- return (
78
- pNormalizedInitConfig.updateManifest &&
79
- pNormalizedInitConfig.sourceLocation.length > 0
80
- );
77
+ return (
78
+ pNormalizedInitConfig.updateManifest &&
79
+ pNormalizedInitConfig.sourceLocation.length > 0
80
+ );
81
81
  }
82
82
 
83
83
  /**
@@ -86,45 +86,45 @@ function manifestIsUpdatable(pNormalizedInitConfig) {
86
86
  * @param {{stdout: NodeJS.WritableStream, stderr: NodeJS.WritableStream}=} pStreams
87
87
  */
88
88
  export default function initConfig(pInit, pConfigFileName, pStreams) {
89
- const lStreams = {
90
- stdout: process.stdout,
91
- stderr: process.stderr,
92
- ...pStreams,
93
- };
94
- /* c8 ignore start */
95
- if (pInit === true) {
96
- getUserInput()
97
- .then(normalizeInitOptions)
98
- .then(buildConfig)
99
- .then(writeConfig)
100
- .catch((pError) => {
101
- lStreams.stderr.write(`\n ERROR: ${pError.message}\n`);
102
- });
103
- /* c8 ignore stop */
104
- } else if (pInit !== false) {
105
- const lNormalizedInitConfig = normalizeInitOptions(getOneShotConfig(pInit));
106
- const lConfigFileName = pConfigFileName || getDefaultConfigFileName();
89
+ const lStreams = {
90
+ stdout: process.stdout,
91
+ stderr: process.stderr,
92
+ ...pStreams,
93
+ };
94
+ /* c8 ignore start */
95
+ if (pInit === true) {
96
+ getUserInput()
97
+ .then(normalizeInitOptions)
98
+ .then(buildConfig)
99
+ .then(writeConfig)
100
+ .catch((pError) => {
101
+ lStreams.stderr.write(`\n ERROR: ${pError.message}\n`);
102
+ });
103
+ /* c8 ignore stop */
104
+ } else if (pInit !== false) {
105
+ const lNormalizedInitConfig = normalizeInitOptions(getOneShotConfig(pInit));
106
+ const lConfigFileName = pConfigFileName || getDefaultConfigFileName();
107
107
 
108
- if (manifestIsUpdatable(lNormalizedInitConfig)) {
109
- // if we're going to update the manifest, no need to complain about
110
- // a .dependency-cruiser that might already exist, because writing
111
- // run scripts to the manifest could still work AOK.
112
- if (!fileExists(lConfigFileName)) {
113
- writeConfig(
114
- buildConfig(lNormalizedInitConfig),
115
- lConfigFileName,
116
- lStreams.stdout,
117
- );
118
- }
119
- writeRunScriptsToManifest(lNormalizedInitConfig, {
120
- outStream: lStreams.stdout,
121
- });
122
- } else {
123
- writeConfig(
124
- buildConfig(lNormalizedInitConfig),
125
- lConfigFileName,
126
- lStreams.stdout,
127
- );
128
- }
129
- }
108
+ if (manifestIsUpdatable(lNormalizedInitConfig)) {
109
+ // if we're going to update the manifest, no need to complain about
110
+ // a .dependency-cruiser that might already exist, because writing
111
+ // run scripts to the manifest could still work AOK.
112
+ if (!fileExists(lConfigFileName)) {
113
+ writeConfig(
114
+ buildConfig(lNormalizedInitConfig),
115
+ lConfigFileName,
116
+ lStreams.stdout,
117
+ );
118
+ }
119
+ writeRunScriptsToManifest(lNormalizedInitConfig, {
120
+ outStream: lStreams.stdout,
121
+ });
122
+ } else {
123
+ writeConfig(
124
+ buildConfig(lNormalizedInitConfig),
125
+ lConfigFileName,
126
+ lStreams.stdout,
127
+ );
128
+ }
129
+ }
130
130
  }
@@ -1,8 +1,8 @@
1
1
  import {
2
- getSourceFolderCandidates,
3
- getTestFolderCandidates,
4
- hasTestsWithinSource,
5
- toSourceLocationArray,
2
+ getSourceFolderCandidates,
3
+ getTestFolderCandidates,
4
+ hasTestsWithinSource,
5
+ toSourceLocationArray,
6
6
  } from "./environment-helpers.mjs";
7
7
  import findExtensions from "./find-extensions.mjs";
8
8
  import meta from "#meta.cjs";
@@ -17,15 +17,15 @@ import meta from "#meta.cjs";
17
17
  * @returns {boolean}
18
18
  */
19
19
  function usesTypeScript(pInitOptions, pExtensions) {
20
- return Boolean(
21
- pInitOptions.tsConfig ||
22
- pInitOptions.tsPreCompilationDeps ||
23
- (pExtensions || []).some((pExtension) =>
24
- [".ts", ".tsx", ".d.ts", ".mts", ".d.mts", ".cts", ".d.cts"].includes(
25
- pExtension,
26
- ),
27
- ),
28
- );
20
+ return Boolean(
21
+ pInitOptions.tsConfig ||
22
+ pInitOptions.tsPreCompilationDeps ||
23
+ (pExtensions || []).some((pExtension) =>
24
+ [".ts", ".tsx", ".d.ts", ".mts", ".d.mts", ".cts", ".d.cts"].includes(
25
+ pExtension,
26
+ ),
27
+ ),
28
+ );
29
29
  }
30
30
 
31
31
  /**
@@ -33,12 +33,12 @@ function usesTypeScript(pInitOptions, pExtensions) {
33
33
  * @returns {string[]}
34
34
  */
35
35
  function getExtensions(pInitOptions) {
36
- let lFoldersToScan = pInitOptions.sourceLocation;
36
+ let lFoldersToScan = pInitOptions.sourceLocation;
37
37
 
38
- if (pInitOptions.hasTestsOutsideSource) {
39
- lFoldersToScan = lFoldersToScan.concat(pInitOptions.testLocation);
40
- }
41
- return findExtensions(lFoldersToScan.length > 0 ? lFoldersToScan : ["."]);
38
+ if (pInitOptions.hasTestsOutsideSource) {
39
+ lFoldersToScan = lFoldersToScan.concat(pInitOptions.testLocation);
40
+ }
41
+ return findExtensions(lFoldersToScan.length > 0 ? lFoldersToScan : ["."]);
42
42
  }
43
43
 
44
44
  /**
@@ -46,26 +46,26 @@ function getExtensions(pInitOptions) {
46
46
  * @return {IPartialInitConfig}
47
47
  */
48
48
  function populate(pInitOptions) {
49
- const lReturnValue = {
50
- version: meta.version,
51
- date: new Date().toJSON(),
52
- ...pInitOptions,
53
- sourceLocation: toSourceLocationArray(
54
- pInitOptions.sourceLocation || getSourceFolderCandidates(),
55
- ),
56
- testLocation: pInitOptions.isMonoRepo
57
- ? []
58
- : toSourceLocationArray(
59
- pInitOptions.testLocation || getTestFolderCandidates(),
60
- ),
61
- };
62
- const lExtensions = getExtensions(lReturnValue);
63
- lReturnValue.usesTypeScript = usesTypeScript(pInitOptions, lExtensions);
49
+ const lReturnValue = {
50
+ version: meta.version,
51
+ date: new Date().toJSON(),
52
+ ...pInitOptions,
53
+ sourceLocation: toSourceLocationArray(
54
+ pInitOptions.sourceLocation || getSourceFolderCandidates(),
55
+ ),
56
+ testLocation: pInitOptions.isMonoRepo
57
+ ? []
58
+ : toSourceLocationArray(
59
+ pInitOptions.testLocation || getTestFolderCandidates(),
60
+ ),
61
+ };
62
+ const lExtensions = getExtensions(lReturnValue);
63
+ lReturnValue.usesTypeScript = usesTypeScript(pInitOptions, lExtensions);
64
64
 
65
- if (lReturnValue.specifyResolutionExtensions) {
66
- lReturnValue.resolutionExtensions = lExtensions;
67
- }
68
- return lReturnValue;
65
+ if (lReturnValue.specifyResolutionExtensions) {
66
+ lReturnValue.resolutionExtensions = lExtensions;
67
+ }
68
+ return lReturnValue;
69
69
  }
70
70
 
71
71
  /**
@@ -74,14 +74,14 @@ function populate(pInitOptions) {
74
74
  * @return {IInitConfig}
75
75
  */
76
76
  export default function normalizeInitOptions(pInitOptions) {
77
- let lReturnValue = populate(pInitOptions);
78
- if (!Object.hasOwn(lReturnValue, "hasTestsOutsideSource")) {
79
- lReturnValue.hasTestsOutsideSource =
80
- !pInitOptions.isMonoRepo &&
81
- !hasTestsWithinSource(
82
- lReturnValue.testLocation,
83
- lReturnValue.sourceLocation,
84
- );
85
- }
86
- return lReturnValue;
77
+ let lReturnValue = populate(pInitOptions);
78
+ if (!Object.hasOwn(lReturnValue, "hasTestsOutsideSource")) {
79
+ lReturnValue.hasTestsOutsideSource =
80
+ !pInitOptions.isMonoRepo &&
81
+ !hasTestsWithinSource(
82
+ lReturnValue.testLocation,
83
+ lReturnValue.sourceLocation,
84
+ );
85
+ }
86
+ return lReturnValue;
87
87
  }
@@ -4,9 +4,9 @@
4
4
  * @returns string
5
5
  */
6
6
  export function folderNameArrayToRE(pArrayOfStrings) {
7
- const lFoldersInARE = pArrayOfStrings
8
- .map((pName) => pName.replace(/\\/g, "\\\\").replace(/\./g, "\\."))
9
- .join("|");
7
+ const lFoldersInARE = pArrayOfStrings
8
+ .map((pName) => pName.replace(/\\/g, "\\\\").replace(/\./g, "\\."))
9
+ .join("|");
10
10
 
11
- return `^(${lFoldersInARE})`;
11
+ return `^(${lFoldersInARE})`;
12
12
  }