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
@@ -14,40 +14,40 @@ const litCoffeeWrap = coffeeWrap(true);
14
14
  const svelteWrap = svelteDingus(typeScriptVanillaWrap);
15
15
 
16
16
  export const EXTENSION2WRAPPER = new Map([
17
- [".js", javaScriptWrap],
18
- [".cjs", javaScriptWrap],
19
- [".mjs", javaScriptWrap],
20
- [".jsx", javaScriptWrap],
21
- [".ts", typeScriptVanillaWrap],
22
- [".tsx", typeScriptTsxWrap],
23
- [".d.ts", typeScriptVanillaWrap],
24
- [".cts", typeScriptVanillaWrap],
25
- [".d.cts", typeScriptVanillaWrap],
26
- [".mts", typeScriptESMWrap],
27
- [".d.mts", typeScriptESMWrap],
28
- [".vue", vueWrap],
29
- [".svelte", svelteWrap],
30
- [".ls", liveScriptWrap],
31
- [".coffee", coffeeVanillaWrap],
32
- [".litcoffee", litCoffeeWrap],
33
- [".coffee.md", litCoffeeWrap],
34
- [".csx", coffeeVanillaWrap],
35
- [".cjsx", coffeeVanillaWrap],
17
+ [".js", javaScriptWrap],
18
+ [".cjs", javaScriptWrap],
19
+ [".mjs", javaScriptWrap],
20
+ [".jsx", javaScriptWrap],
21
+ [".ts", typeScriptVanillaWrap],
22
+ [".tsx", typeScriptTsxWrap],
23
+ [".d.ts", typeScriptVanillaWrap],
24
+ [".cts", typeScriptVanillaWrap],
25
+ [".d.cts", typeScriptVanillaWrap],
26
+ [".mts", typeScriptESMWrap],
27
+ [".d.mts", typeScriptESMWrap],
28
+ [".vue", vueWrap],
29
+ [".svelte", svelteWrap],
30
+ [".ls", liveScriptWrap],
31
+ [".coffee", coffeeVanillaWrap],
32
+ [".litcoffee", litCoffeeWrap],
33
+ [".coffee.md", litCoffeeWrap],
34
+ [".csx", coffeeVanillaWrap],
35
+ [".cjsx", coffeeVanillaWrap],
36
36
  ]);
37
37
 
38
- const BABEL_ABLE_EXTENSIONS = [
39
- ".js",
40
- ".cjs",
41
- ".mjs",
42
- ".jsx",
43
- ".ts",
44
- ".cts",
45
- ".mts",
46
- ".tsx",
47
- ".d.ts",
48
- ".d.cts",
49
- ".d.mts",
50
- ];
38
+ const BABEL_ABLE_EXTENSIONS = new Set([
39
+ ".js",
40
+ ".cjs",
41
+ ".mjs",
42
+ ".jsx",
43
+ ".ts",
44
+ ".cts",
45
+ ".mts",
46
+ ".tsx",
47
+ ".d.ts",
48
+ ".d.cts",
49
+ ".d.mts",
50
+ ]);
51
51
 
52
52
  /**
53
53
  * returns the babel wrapper if there's a babelConfig in the transpiler
@@ -65,14 +65,14 @@ const BABEL_ABLE_EXTENSIONS = [
65
65
  * @returns {module} the module
66
66
  */
67
67
  export function getWrapper(pExtension, pTranspilerOptions) {
68
- if (
69
- Object.keys(pTranspilerOptions?.babelConfig ?? {}).length > 0 &&
70
- BABEL_ABLE_EXTENSIONS.includes(pExtension)
71
- ) {
72
- return babelWrap;
73
- }
68
+ if (
69
+ Object.keys(pTranspilerOptions?.babelConfig ?? {}).length > 0 &&
70
+ BABEL_ABLE_EXTENSIONS.has(pExtension)
71
+ ) {
72
+ return babelWrap;
73
+ }
74
74
 
75
- return EXTENSION2WRAPPER.get(pExtension) || javaScriptWrap;
75
+ return EXTENSION2WRAPPER.get(pExtension) || javaScriptWrap;
76
76
  }
77
77
 
78
78
  /**
@@ -94,14 +94,14 @@ export function getWrapper(pExtension, pTranspilerOptions) {
94
94
  * transpiler matching pExtension
95
95
  */
96
96
  export default function transpile(
97
- { extension, source, filename },
98
- pTranspilerOptions,
97
+ { extension, source, filename },
98
+ pTranspilerOptions,
99
99
  ) {
100
- const lWrapper = getWrapper(extension, pTranspilerOptions);
100
+ const lWrapper = getWrapper(extension, pTranspilerOptions);
101
101
 
102
- if (lWrapper.isAvailable()) {
103
- return lWrapper.transpile(source, filename, pTranspilerOptions);
104
- } else {
105
- return source;
106
- }
102
+ if (lWrapper.isAvailable()) {
103
+ return lWrapper.transpile(source, filename, pTranspilerOptions);
104
+ } else {
105
+ return source;
106
+ }
107
107
  }
@@ -1,12 +1,12 @@
1
1
  import { createRequire } from "node:module";
2
2
 
3
3
  export default {
4
- isAvailable: () => true,
4
+ isAvailable: () => true,
5
5
 
6
- version: () => {
7
- const require = createRequire(import.meta.url);
8
- return `acorn@${require("acorn").version}`;
9
- },
6
+ version: () => {
7
+ const require = createRequire(import.meta.url);
8
+ return `acorn@${require("acorn").version}`;
9
+ },
10
10
 
11
- transpile: (pSource) => pSource,
11
+ transpile: (pSource) => pSource,
12
12
  };
@@ -2,16 +2,16 @@ import tryImport from "#utl/try-import.mjs";
2
2
  import meta from "#meta.cjs";
3
3
 
4
4
  const livescript = await tryImport(
5
- "livescript",
6
- meta.supportedTranspilers.livescript,
5
+ "livescript",
6
+ meta.supportedTranspilers.livescript,
7
7
  );
8
8
 
9
9
  /* c8 ignore start */
10
10
  export default {
11
- isAvailable: () => livescript !== false,
11
+ isAvailable: () => livescript !== false,
12
12
 
13
- version: () => `livescript@${livescript.VERSION}`,
13
+ version: () => `livescript@${livescript.VERSION}`,
14
14
 
15
- transpile: (pSource) => livescript.compile(pSource),
15
+ transpile: (pSource) => livescript.compile(pSource),
16
16
  };
17
17
  /* c8 ignore stop */
@@ -1,7 +1,7 @@
1
1
  /* eslint security/detect-object-injection : 0*/
2
2
  import {
3
- isAvailable as swcIsAvailable,
4
- version as swcVersion,
3
+ isAvailable as swcIsAvailable,
4
+ version as swcVersion,
5
5
  } from "../swc/parse.mjs";
6
6
  import tryAvailable from "./try-import-available.mjs";
7
7
  import javascriptWrap from "./javascript-wrap.mjs";
@@ -14,90 +14,90 @@ import vueTemplateWrap from "./vue-template-wrap.cjs";
14
14
  import meta from "#meta.cjs";
15
15
 
16
16
  const swcWrap = {
17
- isAvailable: () => swcIsAvailable(),
18
- version: () => swcVersion(),
17
+ isAvailable: () => swcIsAvailable(),
18
+ version: () => swcVersion(),
19
19
  };
20
20
  const coffeeScriptWrap = coffeeScriptWrapFunction(false);
21
21
  const svelteWrap = svelteWrapFunction(javascriptWrap);
22
22
  const typescriptWrap = typescriptWrapFunction("esm");
23
23
 
24
24
  function gotCoffee() {
25
- return (
26
- tryAvailable("coffeescript", meta.supportedTranspilers.coffeescript) ||
27
- tryAvailable("coffee-script", meta.supportedTranspilers["coffee-script"])
28
- );
25
+ return (
26
+ tryAvailable("coffeescript", meta.supportedTranspilers.coffeescript) ||
27
+ tryAvailable("coffee-script", meta.supportedTranspilers["coffee-script"])
28
+ );
29
29
  }
30
30
 
31
31
  const TRANSPILER2AVAILABLE = {
32
- babel: tryAvailable("@babel/core", meta.supportedTranspilers.babel),
33
- javascript: true,
34
- "coffee-script": gotCoffee(),
35
- coffeescript: gotCoffee(),
36
- livescript: tryAvailable("livescript", meta.supportedTranspilers.livescript),
37
- svelte: tryAvailable("svelte/compiler", meta.supportedTranspilers.svelte),
38
- swc: tryAvailable("@swc/core", meta.supportedTranspilers.swc),
39
- typescript: tryAvailable("typescript", meta.supportedTranspilers.typescript),
40
- "vue-template-compiler": tryAvailable(
41
- "vue-template-compiler",
42
- meta.supportedTranspilers["vue-template-compiler"],
43
- ),
44
- "@vue/compiler-sfc": tryAvailable(
45
- "@vue/compiler-sfc",
46
- meta.supportedTranspilers["@vue/compiler-sfc"],
47
- ),
32
+ babel: tryAvailable("@babel/core", meta.supportedTranspilers.babel),
33
+ javascript: true,
34
+ "coffee-script": gotCoffee(),
35
+ coffeescript: gotCoffee(),
36
+ livescript: tryAvailable("livescript", meta.supportedTranspilers.livescript),
37
+ svelte: tryAvailable("svelte/compiler", meta.supportedTranspilers.svelte),
38
+ swc: tryAvailable("@swc/core", meta.supportedTranspilers.swc),
39
+ typescript: tryAvailable("typescript", meta.supportedTranspilers.typescript),
40
+ "vue-template-compiler": tryAvailable(
41
+ "vue-template-compiler",
42
+ meta.supportedTranspilers["vue-template-compiler"],
43
+ ),
44
+ "@vue/compiler-sfc": tryAvailable(
45
+ "@vue/compiler-sfc",
46
+ meta.supportedTranspilers["@vue/compiler-sfc"],
47
+ ),
48
48
  };
49
49
 
50
50
  const TRANSPILER2WRAPPER = {
51
- babel: babelWrap,
52
- javascript: javascriptWrap,
53
- "coffee-script": coffeeScriptWrap,
54
- coffeescript: coffeeScriptWrap,
55
- livescript: livescriptWrap,
56
- svelte: svelteWrap,
57
- swc: swcWrap,
58
- typescript: typescriptWrap,
59
- "vue-template-compiler": vueTemplateWrap,
60
- "@vue/compiler-sfc": vueTemplateWrap,
51
+ babel: babelWrap,
52
+ javascript: javascriptWrap,
53
+ "coffee-script": coffeeScriptWrap,
54
+ coffeescript: coffeeScriptWrap,
55
+ livescript: livescriptWrap,
56
+ svelte: svelteWrap,
57
+ swc: swcWrap,
58
+ typescript: typescriptWrap,
59
+ "vue-template-compiler": vueTemplateWrap,
60
+ "@vue/compiler-sfc": vueTemplateWrap,
61
61
  };
62
62
 
63
63
  export const EXTENSION2AVAILABLE = new Map([
64
- [".js", TRANSPILER2AVAILABLE.javascript],
65
- [".cjs", TRANSPILER2AVAILABLE.javascript],
66
- [".mjs", TRANSPILER2AVAILABLE.javascript],
67
- [".jsx", TRANSPILER2AVAILABLE.javascript],
68
- [".ts", TRANSPILER2AVAILABLE.typescript],
69
- [".tsx", TRANSPILER2AVAILABLE.typescript],
70
- [".d.ts", TRANSPILER2AVAILABLE.typescript],
71
- [".cts", TRANSPILER2AVAILABLE.typescript],
72
- [".d.cts", TRANSPILER2AVAILABLE.typescript],
73
- [".mts", TRANSPILER2AVAILABLE.typescript],
74
- [".d.mts", TRANSPILER2AVAILABLE.typescript],
75
- [
76
- ".vue",
77
- TRANSPILER2AVAILABLE["vue-template-compiler"] ||
78
- TRANSPILER2AVAILABLE["@vue/compiler-sfc"],
79
- ],
80
- [".svelte", TRANSPILER2AVAILABLE.svelte],
81
- [".ls", TRANSPILER2AVAILABLE.livescript],
82
- [".coffee", gotCoffee()],
83
- [".litcoffee", gotCoffee()],
84
- [".coffee.md", gotCoffee()],
85
- [".csx", gotCoffee()],
86
- [".cjsx", gotCoffee()],
64
+ [".js", TRANSPILER2AVAILABLE.javascript],
65
+ [".cjs", TRANSPILER2AVAILABLE.javascript],
66
+ [".mjs", TRANSPILER2AVAILABLE.javascript],
67
+ [".jsx", TRANSPILER2AVAILABLE.javascript],
68
+ [".ts", TRANSPILER2AVAILABLE.typescript],
69
+ [".tsx", TRANSPILER2AVAILABLE.typescript],
70
+ [".d.ts", TRANSPILER2AVAILABLE.typescript],
71
+ [".cts", TRANSPILER2AVAILABLE.typescript],
72
+ [".d.cts", TRANSPILER2AVAILABLE.typescript],
73
+ [".mts", TRANSPILER2AVAILABLE.typescript],
74
+ [".d.mts", TRANSPILER2AVAILABLE.typescript],
75
+ [
76
+ ".vue",
77
+ TRANSPILER2AVAILABLE["vue-template-compiler"] ||
78
+ TRANSPILER2AVAILABLE["@vue/compiler-sfc"],
79
+ ],
80
+ [".svelte", TRANSPILER2AVAILABLE.svelte],
81
+ [".ls", TRANSPILER2AVAILABLE.livescript],
82
+ [".coffee", gotCoffee()],
83
+ [".litcoffee", gotCoffee()],
84
+ [".coffee.md", gotCoffee()],
85
+ [".csx", gotCoffee()],
86
+ [".cjsx", gotCoffee()],
87
87
  ]);
88
88
 
89
89
  const EXTENSIONS_PER_PARSER = {
90
- swc: [".js", ".cjs", ".mjs", ".jsx", ".ts", ".tsx", ".d.ts"],
91
- // tsc: [".js", ".cjs", ".mjs", ".jsx", ".ts", ".tsx", ".d.ts"],
92
- // acorn: [".js", ".cjs", ".mjs", ".jsx"],
90
+ swc: new Set([".js", ".cjs", ".mjs", ".jsx", ".ts", ".tsx", ".d.ts"]),
91
+ // tsc: [".js", ".cjs", ".mjs", ".jsx", ".ts", ".tsx", ".d.ts"],
92
+ // acorn: [".js", ".cjs", ".mjs", ".jsx"],
93
93
  };
94
94
 
95
95
  function extensionIsAvailable(pExtension) {
96
- return (
97
- EXTENSION2AVAILABLE.get(pExtension) ||
98
- // should eventually also check whether swc is enabled as a parser?
99
- (TRANSPILER2AVAILABLE.swc && EXTENSIONS_PER_PARSER.swc.includes(pExtension))
100
- );
96
+ return (
97
+ EXTENSION2AVAILABLE.get(pExtension) ||
98
+ // should eventually also check whether swc is enabled as a parser?
99
+ (TRANSPILER2AVAILABLE.swc && EXTENSIONS_PER_PARSER.swc.has(pExtension))
100
+ );
101
101
  }
102
102
 
103
103
  /**
@@ -107,15 +107,15 @@ function extensionIsAvailable(pExtension) {
107
107
  * @type {IAvailableExtension[]}
108
108
  */
109
109
  export const allExtensions = Array.from(EXTENSION2AVAILABLE.keys()).map(
110
- (pExtension) => ({
111
- extension: pExtension,
112
- available: extensionIsAvailable(pExtension),
113
- }),
110
+ (pExtension) => ({
111
+ extension: pExtension,
112
+ available: extensionIsAvailable(pExtension),
113
+ }),
114
114
  );
115
115
 
116
116
  function getCurrentVersion(pTranspiler) {
117
- const lTranspiler = TRANSPILER2WRAPPER[pTranspiler];
118
- return lTranspiler.isAvailable() ? lTranspiler.version() : "-";
117
+ const lTranspiler = TRANSPILER2WRAPPER[pTranspiler];
118
+ return lTranspiler.isAvailable() ? lTranspiler.version() : "-";
119
119
  }
120
120
 
121
121
  /**
@@ -125,7 +125,7 @@ function getCurrentVersion(pTranspiler) {
125
125
  * @type {string[]}
126
126
  */
127
127
  export const scannableExtensions = Array.from(
128
- EXTENSION2AVAILABLE.keys(),
128
+ EXTENSION2AVAILABLE.keys(),
129
129
  ).filter(extensionIsAvailable);
130
130
 
131
131
  /**
@@ -136,12 +136,12 @@ export const scannableExtensions = Array.from(
136
136
  * @return {IAvailableTranspiler[]} an array of supported transpilers
137
137
  */
138
138
  export function getAvailableTranspilers() {
139
- return ["javascript"]
140
- .concat(Object.keys(meta.supportedTranspilers))
141
- .map((pTranspiler) => ({
142
- name: pTranspiler,
143
- version: meta.supportedTranspilers[pTranspiler] || "*",
144
- available: TRANSPILER2AVAILABLE[pTranspiler],
145
- currentVersion: getCurrentVersion(pTranspiler),
146
- }));
139
+ return ["javascript"]
140
+ .concat(Object.keys(meta.supportedTranspilers))
141
+ .map((pTranspiler) => ({
142
+ name: pTranspiler,
143
+ version: meta.supportedTranspilers[pTranspiler] || "*",
144
+ available: TRANSPILER2AVAILABLE[pTranspiler],
145
+ currentVersion: getCurrentVersion(pTranspiler),
146
+ }));
147
147
  }
@@ -9,93 +9,93 @@
9
9
  Leaving it be as it's the way svelte currently functions
10
10
  */
11
11
  function parseAttributes(pString) {
12
- const lAttributes = {};
13
- pString
14
- .split(/\s+/)
15
- .filter(Boolean)
16
- .forEach((pAttribute) => {
17
- const lEqualsSignIndex = pAttribute.indexOf("=");
18
- if (lEqualsSignIndex === -1) {
19
- lAttributes[pAttribute] = true;
20
- } else {
21
- lAttributes[pAttribute.slice(0, lEqualsSignIndex)] = "'\"".includes(
22
- pAttribute[lEqualsSignIndex + 1],
23
- )
24
- ? pAttribute.slice(lEqualsSignIndex + 2, -1)
25
- : pAttribute.slice(lEqualsSignIndex + 1);
26
- }
27
- });
28
- return lAttributes;
12
+ const lAttributes = {};
13
+ pString
14
+ .split(/\s+/)
15
+ .filter(Boolean)
16
+ .forEach((pAttribute) => {
17
+ const lEqualsSignIndex = pAttribute.indexOf("=");
18
+ if (lEqualsSignIndex === -1) {
19
+ lAttributes[pAttribute] = true;
20
+ } else {
21
+ lAttributes[pAttribute.slice(0, lEqualsSignIndex)] = "'\"".includes(
22
+ pAttribute[lEqualsSignIndex + 1],
23
+ )
24
+ ? pAttribute.slice(lEqualsSignIndex + 2, -1)
25
+ : pAttribute.slice(lEqualsSignIndex + 1);
26
+ }
27
+ });
28
+ return lAttributes;
29
29
  }
30
30
 
31
31
  function composeTranspilerOptions(pTranspilerOptions) {
32
- return {
33
- ...pTranspilerOptions,
34
- tsConfig: {
35
- ...(pTranspilerOptions?.tsConfig ?? {}),
36
- options: {
37
- ...(pTranspilerOptions?.tsConfig?.options ?? {}),
38
- importsNotUsedAsValues: "preserve",
39
- jsx: "preserve",
40
- },
41
- },
42
- };
32
+ return {
33
+ ...pTranspilerOptions,
34
+ tsConfig: {
35
+ ...(pTranspilerOptions?.tsConfig ?? {}),
36
+ options: {
37
+ ...(pTranspilerOptions?.tsConfig?.options ?? {}),
38
+ importsNotUsedAsValues: "preserve",
39
+ jsx: "preserve",
40
+ },
41
+ },
42
+ };
43
43
  }
44
44
 
45
45
  function getSourceReplacer(pTranspiler, pTranspilerOptions) {
46
- return (pMatch, pAttributes, pSource) => {
47
- const lAttributes = pAttributes || "";
48
- const lParsedAttributes = parseAttributes(lAttributes);
46
+ return (pMatch, pAttributes, pSource) => {
47
+ const lAttributes = pAttributes || "";
48
+ const lParsedAttributes = parseAttributes(lAttributes);
49
49
 
50
- if (lParsedAttributes.lang === "ts") {
51
- return `<script${lAttributes}>${pTranspiler(
52
- pSource,
53
- "dummy-filename",
54
- composeTranspilerOptions(pTranspilerOptions),
55
- )}</script>`;
56
- } else {
57
- return pMatch;
58
- }
59
- };
50
+ if (lParsedAttributes.lang === "ts") {
51
+ return `<script${lAttributes}>${pTranspiler(
52
+ pSource,
53
+ "dummy-filename",
54
+ composeTranspilerOptions(pTranspilerOptions),
55
+ )}</script>`;
56
+ } else {
57
+ return pMatch;
58
+ }
59
+ };
60
60
  }
61
61
 
62
62
  function styleReplacer(pMatch, pAttributes) {
63
- const lParsedAttributes = parseAttributes(pAttributes || "");
63
+ const lParsedAttributes = parseAttributes(pAttributes || "");
64
64
 
65
- if (lParsedAttributes.lang === "css" || !pAttributes) {
66
- return pMatch;
67
- } else {
68
- return "";
69
- }
65
+ if (lParsedAttributes.lang === "css" || !pAttributes) {
66
+ return pMatch;
67
+ } else {
68
+ return "";
69
+ }
70
70
  }
71
71
 
72
72
  export default function preProcess(
73
- pSource,
74
- pTranspilerWrapper,
75
- pTranspilerOptions,
73
+ pSource,
74
+ pTranspilerWrapper,
75
+ pTranspilerOptions,
76
76
  ) {
77
- // regexes from
78
- // github.com/sveltejs/svelte/blob/67dea941bb1e61f0912ebd2257666b899c1ccefa/src/compiler/preprocess/index.ts#L165
79
- // eslint-disable-next-line security/detect-unsafe-regex
80
- const lScriptRegex = /<script(\s[^]*?)?(?:>([^]*?)<\/script>|\/>)/gi;
81
- // eslint-disable-next-line security/detect-unsafe-regex
82
- const lStyleRegex = /<style(\s[^]*?)?(?:>([^]*?)<\/style>|\/>)/gi;
77
+ // regexes from
78
+ // github.com/sveltejs/svelte/blob/67dea941bb1e61f0912ebd2257666b899c1ccefa/src/compiler/preprocess/index.ts#L165
79
+ // eslint-disable-next-line security/detect-unsafe-regex
80
+ const lScriptRegex = /<script(\s[^]*?)?(?:>([^]*?)<\/script>|\/>)/gi;
81
+ // eslint-disable-next-line security/detect-unsafe-regex
82
+ const lStyleRegex = /<style(\s[^]*?)?(?:>([^]*?)<\/style>|\/>)/gi;
83
83
 
84
- if (pTranspilerWrapper.isAvailable && pTranspilerWrapper.isAvailable()) {
85
- return (
86
- pSource
87
- .replace(
88
- lScriptRegex,
89
- getSourceReplacer(pTranspilerWrapper.transpile, pTranspilerOptions),
90
- )
91
- // we don't regard styling in our dependency analysis, so we can remove
92
- // styles that (our instance of) svelte doesn't have pre-processors
93
- // installed for (e.g. sass/scss/postcss/sss/styl/stylus/...) and that
94
- // can potentially get svelte compiler to error out (for an example see
95
- // https://github.com/sverweij/dependency-cruiser/issues/713)
96
- .replace(lStyleRegex, styleReplacer)
97
- );
98
- } else {
99
- return pSource;
100
- }
84
+ if (pTranspilerWrapper.isAvailable && pTranspilerWrapper.isAvailable()) {
85
+ return (
86
+ pSource
87
+ .replace(
88
+ lScriptRegex,
89
+ getSourceReplacer(pTranspilerWrapper.transpile, pTranspilerOptions),
90
+ )
91
+ // we don't regard styling in our dependency analysis, so we can remove
92
+ // styles that (our instance of) svelte doesn't have pre-processors
93
+ // installed for (e.g. sass/scss/postcss/sss/styl/stylus/...) and that
94
+ // can potentially get svelte compiler to error out (for an example see
95
+ // https://github.com/sverweij/dependency-cruiser/issues/713)
96
+ .replace(lStyleRegex, styleReplacer)
97
+ );
98
+ } else {
99
+ return pSource;
100
+ }
101
101
  }
@@ -3,29 +3,29 @@ import tryImport from "#utl/try-import.mjs";
3
3
  import meta from "#meta.cjs";
4
4
 
5
5
  const { compile, VERSION } = await tryImport(
6
- "svelte/compiler",
7
- meta.supportedTranspilers.svelte,
6
+ "svelte/compiler",
7
+ meta.supportedTranspilers.svelte,
8
8
  );
9
9
 
10
10
  function getTranspiler(pTranspilerWrapper) {
11
- return (pSource, _pFileName, pTranspilerOptions) => {
12
- const lPreProcessedSource = preProcess(
13
- pSource,
14
- pTranspilerWrapper,
15
- pTranspilerOptions,
16
- );
17
- // in svelte 5 one must provide the second argument
18
- // lest it throws because it's accessing a property
19
- // in it. In svelte 4 (which also takes compiler
20
- // options there) this isn't necessary.
21
- return compile(lPreProcessedSource, {}).js.code;
22
- };
11
+ return (pSource, _pFileName, pTranspilerOptions) => {
12
+ const lPreProcessedSource = preProcess(
13
+ pSource,
14
+ pTranspilerWrapper,
15
+ pTranspilerOptions,
16
+ );
17
+ // in svelte 5 one must provide the second argument
18
+ // lest it throws because it's accessing a property
19
+ // in it. In svelte 4 (which also takes compiler
20
+ // options there) this isn't necessary.
21
+ return compile(lPreProcessedSource, {}).js.code;
22
+ };
23
23
  }
24
24
 
25
25
  export default function svelteWrap(pTranspilerWrapper) {
26
- return {
27
- isAvailable: () => Boolean(compile),
28
- version: () => `svelte/compiler@${VERSION}`,
29
- transpile: getTranspiler(pTranspilerWrapper),
30
- };
26
+ return {
27
+ isAvailable: () => Boolean(compile),
28
+ version: () => `svelte/compiler@${VERSION}`,
29
+ transpile: getTranspiler(pTranspilerWrapper),
30
+ };
31
31
  }
@@ -9,37 +9,36 @@ const SCOPED_PACKAGE_RE = "@[^/]+(?:/[^/]+)";
9
9
  const ROOT_MODULE_RE = new RegExp(`^(${SCOPED_PACKAGE_RE}|${PACKAGE_RE})`, "g");
10
10
 
11
11
  function extractRootModuleName(pModuleName) {
12
- return (pModuleName.match(ROOT_MODULE_RE) || []).shift();
12
+ return (pModuleName.match(ROOT_MODULE_RE) || []).shift();
13
13
  }
14
14
 
15
15
  function getVersion(pModuleName) {
16
- // of course we'd love to use something like an import with an import assertion
17
- // (yo, you're import-ing 'json'!), but that's _experimental_, printing scary
18
- // messages to stderr so: ¯\_(ツ)_/¯
19
- // eslint-disable-next-line import/no-dynamic-require, security/detect-non-literal-require
20
- const lManifest = require(
21
- path.join(extractRootModuleName(pModuleName), "package.json"),
22
- );
23
- return lManifest.version;
16
+ // of course we'd love to use something like an import with an import assertion
17
+ // As that's _experimental_ we have to use _require_ in stead.
18
+ // eslint-disable-next-line import/no-dynamic-require, security/detect-non-literal-require
19
+ const lManifest = require(
20
+ path.join(extractRootModuleName(pModuleName), "package.json"),
21
+ );
22
+ return lManifest.version;
24
23
  }
25
24
 
26
25
  export default function tryImportAvailable(pModuleName, pSemanticVersion) {
27
- try {
28
- if (pSemanticVersion) {
29
- const lVersion = getVersion(pModuleName);
30
- const lCoerced = coerce(lVersion);
31
- if (
32
- lVersion &&
33
- lCoerced &&
34
- !satisfies(lCoerced.version, pSemanticVersion)
35
- ) {
36
- return false;
37
- }
38
- }
39
- // of course we'd love to use something like import.meta.resolve, but
40
- // that's _experimental_, so ¯\_(ツ)_/¯
41
- return Boolean(require.resolve(pModuleName));
42
- } catch (pError) {
43
- return false;
44
- }
26
+ try {
27
+ if (pSemanticVersion) {
28
+ const lVersion = getVersion(pModuleName);
29
+ const lCoerced = coerce(lVersion);
30
+ if (
31
+ lVersion &&
32
+ lCoerced &&
33
+ !satisfies(lCoerced.version, pSemanticVersion)
34
+ ) {
35
+ return false;
36
+ }
37
+ }
38
+ // of course we'd love to use something like import.meta.resolve, but
39
+ // that's _experimental_, so ¯\_(ツ)_/¯
40
+ return Boolean(require.resolve(pModuleName));
41
+ } catch (pError) {
42
+ return false;
43
+ }
45
44
  }