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.
- package/bin/depcruise-baseline.mjs +43 -43
- package/bin/depcruise-fmt.mjs +89 -89
- package/bin/dependency-cruise.mjs +171 -171
- package/configs/plugins/3d-reporter-plugin.mjs +36 -36
- package/configs/plugins/stats-reporter-plugin.mjs +51 -51
- package/configs/recommended-strict.cjs +5 -5
- package/configs/recommended-warn-only.cjs +5 -5
- package/configs/recommended.cjs +22 -22
- package/configs/rules/no-circular.cjs +10 -10
- package/configs/rules/no-deprecated-core.cjs +10 -10
- package/configs/rules/no-duplicate-dependency-types.cjs +17 -17
- package/configs/rules/no-non-package-json.cjs +11 -11
- package/configs/rules/no-orphans.cjs +18 -18
- package/configs/rules/not-to-deprecated.cjs +10 -10
- package/configs/rules/not-to-unresolvable.cjs +10 -10
- package/package.json +170 -170
- package/src/cache/cache.mjs +139 -139
- package/src/cache/content-strategy.mjs +88 -88
- package/src/cache/find-content-changes.mjs +58 -58
- package/src/cache/helpers.mjs +52 -52
- package/src/cache/metadata-strategy.mjs +83 -83
- package/src/cache/options-compatible.mjs +56 -109
- package/src/cli/assert-node-environment-suitable.mjs +7 -7
- package/src/cli/defaults.mjs +5 -5
- package/src/cli/format-meta-info.mjs +22 -22
- package/src/cli/format.mjs +28 -28
- package/src/cli/index.mjs +145 -145
- package/src/cli/init-config/build-config.mjs +94 -94
- package/src/cli/init-config/environment-helpers.mjs +77 -77
- package/src/cli/init-config/find-extensions.mjs +27 -27
- package/src/cli/init-config/get-user-input.mjs +151 -151
- package/src/cli/init-config/index.mjs +88 -88
- package/src/cli/init-config/normalize-init-options.mjs +47 -47
- package/src/cli/init-config/utl.mjs +4 -4
- package/src/cli/init-config/validators.mjs +10 -10
- package/src/cli/init-config/write-config.mjs +21 -21
- package/src/cli/init-config/write-run-scripts-to-manifest.mjs +103 -107
- package/src/cli/listeners/cli-feedback.mjs +49 -49
- package/src/cli/listeners/ndjson.mjs +66 -66
- package/src/cli/listeners/performance-log/format-helpers.mjs +63 -63
- package/src/cli/listeners/performance-log/handlers.mjs +56 -56
- package/src/cli/listeners/performance-log/index.mjs +37 -37
- package/src/cli/normalize-cli-options.mjs +182 -182
- package/src/cli/tools/wrap-stream-in-html.mjs +37 -37
- package/src/cli/utl/assert-file-existence.mjs +7 -7
- package/src/cli/utl/io.mjs +28 -31
- package/src/config-utl/extract-babel-config.mjs +69 -69
- package/src/config-utl/extract-depcruise-config/index.mjs +54 -54
- package/src/config-utl/extract-depcruise-config/merge-configs.mjs +63 -63
- package/src/config-utl/extract-depcruise-config/read-config.mjs +9 -9
- package/src/config-utl/extract-depcruise-options.mjs +9 -9
- package/src/config-utl/extract-known-violations.mjs +49 -49
- package/src/config-utl/extract-ts-config.mjs +46 -48
- package/src/config-utl/extract-webpack-resolve-config.mjs +88 -88
- package/src/config-utl/make-absolute.mjs +5 -5
- package/src/enrich/add-validations.mjs +13 -13
- package/src/enrich/derive/circular.mjs +49 -49
- package/src/enrich/derive/dependents.mjs +27 -27
- package/src/enrich/derive/folders/aggregate-to-folders.mjs +104 -104
- package/src/enrich/derive/folders/index.mjs +19 -19
- package/src/enrich/derive/folders/utl.mjs +18 -18
- package/src/enrich/derive/metrics/get-module-metrics.mjs +27 -27
- package/src/enrich/derive/metrics/index.mjs +8 -8
- package/src/enrich/derive/module-utl.mjs +18 -18
- package/src/enrich/derive/orphan/index.mjs +18 -18
- package/src/enrich/derive/orphan/is-orphan.mjs +9 -9
- package/src/enrich/derive/reachable.mjs +165 -168
- package/src/enrich/enrich-modules.mjs +25 -25
- package/src/enrich/index.mjs +15 -15
- package/src/enrich/soften-known-violations.mjs +90 -90
- package/src/enrich/summarize/add-rule-set-used.mjs +13 -13
- package/src/enrich/summarize/get-stats.mjs +17 -17
- package/src/enrich/summarize/index.mjs +18 -18
- package/src/enrich/summarize/is-same-violation.mjs +30 -30
- package/src/enrich/summarize/summarize-folders.mjs +35 -35
- package/src/enrich/summarize/summarize-modules.mjs +97 -97
- package/src/enrich/summarize/summarize-options.mjs +71 -71
- package/src/extract/acorn/estree-helpers.mjs +66 -66
- package/src/extract/acorn/extract-amd-deps.mjs +63 -64
- package/src/extract/acorn/extract-cjs-deps.mjs +83 -83
- package/src/extract/acorn/extract-es6-deps.mjs +54 -54
- package/src/extract/acorn/extract-stats.mjs +4 -4
- package/src/extract/acorn/extract.mjs +28 -28
- package/src/extract/acorn/parse.mjs +37 -37
- package/src/extract/clear-caches.mjs +7 -7
- package/src/extract/extract-dependencies.mjs +109 -109
- package/src/extract/extract-stats.mjs +21 -21
- package/src/extract/gather-initial-sources.mjs +64 -64
- package/src/extract/helpers.mjs +73 -71
- package/src/extract/index.mjs +120 -120
- package/src/extract/resolve/determine-dependency-types.mjs +166 -169
- package/src/extract/resolve/external-module-helpers.mjs +76 -76
- package/src/extract/resolve/get-manifest.mjs +79 -79
- package/src/extract/resolve/index.mjs +175 -164
- package/src/extract/resolve/is-built-in.mjs +22 -24
- package/src/extract/resolve/merge-manifests.mjs +43 -43
- package/src/extract/resolve/module-classifiers.mjs +229 -229
- package/src/extract/resolve/resolve-amd.mjs +44 -44
- package/src/extract/resolve/resolve-cjs.mjs +40 -40
- package/src/extract/resolve/resolve-helpers.mjs +20 -20
- package/src/extract/resolve/resolve.mjs +26 -26
- package/src/extract/swc/dependency-visitor.mjs +211 -211
- package/src/extract/swc/extract-swc-deps.mjs +4 -4
- package/src/extract/swc/extract.mjs +7 -7
- package/src/extract/swc/parse.mjs +12 -12
- package/src/extract/transpile/babel-wrap.mjs +9 -9
- package/src/extract/transpile/coffeescript-wrap.mjs +21 -21
- package/src/extract/transpile/index.mjs +47 -47
- package/src/extract/transpile/javascript-wrap.mjs +6 -6
- package/src/extract/transpile/livescript-wrap.mjs +5 -5
- package/src/extract/transpile/meta.mjs +80 -80
- package/src/extract/transpile/svelte-preprocess.mjs +73 -73
- package/src/extract/transpile/svelte-wrap.mjs +19 -19
- package/src/extract/transpile/try-import-available.mjs +26 -27
- package/src/extract/transpile/typescript-wrap.mjs +39 -39
- package/src/extract/transpile/vue-template-wrap.cjs +43 -43
- package/src/extract/tsc/extract-stats.mjs +4 -4
- package/src/extract/tsc/extract-typescript-deps.mjs +429 -398
- package/src/extract/tsc/extract.mjs +22 -22
- package/src/extract/tsc/parse.mjs +21 -21
- package/src/graph-utl/add-focus.mjs +35 -35
- package/src/graph-utl/compare.mjs +24 -24
- package/src/graph-utl/consolidate-module-dependencies.mjs +35 -35
- package/src/graph-utl/consolidate-modules.mjs +33 -33
- package/src/graph-utl/consolidate-to-folder.mjs +13 -13
- package/src/graph-utl/consolidate-to-pattern.mjs +34 -34
- package/src/graph-utl/filter-bank.mjs +74 -69
- package/src/graph-utl/indexed-module-graph.mjs +227 -225
- package/src/graph-utl/match-facade.mjs +3 -3
- package/src/graph-utl/rule-set.mjs +20 -20
- package/src/graph-utl/strip-self-transitions.mjs +6 -6
- package/src/main/cruise.mjs +81 -81
- package/src/main/files-and-dirs/normalize.mjs +7 -7
- package/src/main/format.mjs +11 -14
- package/src/main/helpers.mjs +25 -25
- package/src/main/index.mjs +8 -8
- package/src/main/options/assert-validity.mjs +100 -100
- package/src/main/options/defaults.mjs +11 -11
- package/src/main/options/normalize.mjs +158 -160
- package/src/main/report-wrap.mjs +37 -37
- package/src/main/resolve-options/normalize.mjs +127 -128
- package/src/main/rule-set/assert-validity.mjs +67 -73
- package/src/main/rule-set/normalize.mjs +81 -79
- package/src/meta.cjs +15 -16
- package/src/report/anon/anonymize-path-element.mjs +20 -34
- package/src/report/anon/anonymize-path.mjs +11 -11
- package/src/report/anon/index.mjs +119 -119
- package/src/report/anon/random-string.mjs +23 -23
- package/src/report/azure-devops.mjs +75 -99
- package/src/report/baseline.mjs +9 -9
- package/src/report/csv.mjs +13 -13
- package/src/report/d2.mjs +105 -105
- package/src/report/dot/default-theme.mjs +152 -152
- package/src/report/dot/index.mjs +146 -146
- package/src/report/dot/module-utl.mjs +72 -72
- package/src/report/dot/prepare-custom-level.mjs +20 -20
- package/src/report/dot/prepare-flat-level.mjs +11 -11
- package/src/report/dot/prepare-folder-level.mjs +12 -13
- package/src/report/dot/theming.mjs +73 -73
- package/src/report/dot-webpage/dot-module.mjs +36 -36
- package/src/report/dot-webpage/svg-in-html-snippets/script.cjs +208 -210
- package/src/report/dot-webpage/svg-in-html-snippets/style.css +51 -51
- package/src/report/dot-webpage/wrap-in-html.mjs +7 -7
- package/src/report/error-html/index.mjs +49 -49
- package/src/report/error-html/utl.mjs +99 -99
- package/src/report/error-long.mjs +1 -1
- package/src/report/error.mjs +93 -93
- package/src/report/html/index.mjs +48 -48
- package/src/report/identity.mjs +4 -4
- package/src/report/index.mjs +33 -33
- package/src/report/json.mjs +4 -4
- package/src/report/markdown.mjs +120 -120
- package/src/report/mermaid.mjs +111 -111
- package/src/report/metrics.mjs +185 -185
- package/src/report/null.mjs +4 -4
- package/src/report/plugins.mjs +41 -41
- package/src/report/teamcity.mjs +150 -150
- package/src/report/text.mjs +42 -42
- package/src/report/utl/dependency-to-incidence-transformer.mjs +32 -32
- package/src/report/utl/index.mjs +53 -53
- package/src/schema/configuration.validate.mjs +1 -0
- package/src/schema/cruise-result.validate.mjs +1 -0
- package/src/schema/utl.mjs +6 -0
- package/src/utl/array-util.mjs +25 -25
- package/src/utl/bus.mjs +12 -12
- package/src/utl/extract-root-module-name.cjs +8 -8
- package/src/utl/find-all-files.mjs +54 -54
- package/src/utl/get-extension.mjs +2 -2
- package/src/utl/object-util.mjs +21 -22
- package/src/utl/path-to-posix.mjs +5 -5
- package/src/utl/regex-util.mjs +20 -20
- package/src/utl/try-import.mjs +42 -41
- package/src/utl/try-require.cjs +23 -23
- package/src/utl/wrap-and-indent.mjs +33 -33
- package/src/validate/index.mjs +65 -65
- package/src/validate/match-dependency-rule.mjs +47 -47
- package/src/validate/match-folder-dependency-rule.mjs +27 -27
- package/src/validate/match-module-rule-helpers.mjs +76 -76
- package/src/validate/match-module-rule.mjs +12 -12
- package/src/validate/matchers.mjs +162 -162
- package/src/validate/rule-classifiers.mjs +9 -9
- package/src/validate/violates-required-rule.mjs +23 -23
- package/types/cache-options.d.mts +27 -27
- package/types/config-utl/extract-babel-config.d.mts +1 -1
- package/types/config-utl/extract-depcruise-config.d.mts +3 -3
- package/types/config-utl/extract-depcruise-options.d.mts +1 -1
- package/types/config-utl/extract-ts-config.d.mts +1 -1
- package/types/config-utl/extract-webpack-resolve-config.d.mts +3 -3
- package/types/configuration.d.mts +10 -10
- package/types/cruise-result.d.mts +414 -414
- package/types/dependency-cruiser.d.mts +52 -52
- package/types/filter-types.d.mts +45 -45
- package/types/options.d.mts +430 -430
- package/types/plugins/3d-reporter-plugin.d.mts +9 -9
- package/types/plugins/mermaid-reporter-plugin.d.mts +10 -10
- package/types/plugins/stats-reporter-plugin.d.mts +9 -9
- package/types/reporter-options.d.mts +196 -196
- package/types/resolve-options.d.mts +23 -23
- package/types/restrictions.d.mts +174 -174
- package/types/rule-set.d.mts +132 -132
- package/types/rule-summary.d.mts +14 -14
- package/types/shared-types.d.mts +89 -89
- package/types/strict-filter-types.d.mts +52 -52
- package/types/strict-options.d.mts +34 -34
- package/types/strict-restrictions.d.mts +25 -25
- package/types/strict-rule-set.d.mts +36 -36
- package/types/violations.d.mts +40 -40
- package/src/schema/README.md +0 -5
- package/src/schema/baseline-violations.schema.mjs +0 -1
- package/src/schema/configuration.schema.mjs +0 -1
- package/src/schema/cruise-result.schema.mjs +0 -1
- 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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
if (
|
|
69
|
+
Object.keys(pTranspilerOptions?.babelConfig ?? {}).length > 0 &&
|
|
70
|
+
BABEL_ABLE_EXTENSIONS.has(pExtension)
|
|
71
|
+
) {
|
|
72
|
+
return babelWrap;
|
|
73
|
+
}
|
|
74
74
|
|
|
75
|
-
|
|
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
|
-
|
|
98
|
-
|
|
97
|
+
{ extension, source, filename },
|
|
98
|
+
pTranspilerOptions,
|
|
99
99
|
) {
|
|
100
|
-
|
|
100
|
+
const lWrapper = getWrapper(extension, pTranspilerOptions);
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
4
|
+
isAvailable: () => true,
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
version: () => {
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
return `acorn@${require("acorn").version}`;
|
|
9
|
+
},
|
|
10
10
|
|
|
11
|
-
|
|
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
|
-
|
|
6
|
-
|
|
5
|
+
"livescript",
|
|
6
|
+
meta.supportedTranspilers.livescript,
|
|
7
7
|
);
|
|
8
8
|
|
|
9
9
|
/* c8 ignore start */
|
|
10
10
|
export default {
|
|
11
|
-
|
|
11
|
+
isAvailable: () => livescript !== false,
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
version: () => `livescript@${livescript.VERSION}`,
|
|
14
14
|
|
|
15
|
-
|
|
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
|
-
|
|
4
|
-
|
|
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
|
-
|
|
18
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
(pExtension) => ({
|
|
111
|
+
extension: pExtension,
|
|
112
|
+
available: extensionIsAvailable(pExtension),
|
|
113
|
+
}),
|
|
114
114
|
);
|
|
115
115
|
|
|
116
116
|
function getCurrentVersion(pTranspiler) {
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
return (pMatch, pAttributes, pSource) => {
|
|
47
|
+
const lAttributes = pAttributes || "";
|
|
48
|
+
const lParsedAttributes = parseAttributes(lAttributes);
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
63
|
+
const lParsedAttributes = parseAttributes(pAttributes || "");
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
pSource,
|
|
74
|
+
pTranspilerWrapper,
|
|
75
|
+
pTranspilerOptions,
|
|
76
76
|
) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
7
|
-
|
|
6
|
+
"svelte/compiler",
|
|
7
|
+
meta.supportedTranspilers.svelte,
|
|
8
8
|
);
|
|
9
9
|
|
|
10
10
|
function getTranspiler(pTranspilerWrapper) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
12
|
+
return (pModuleName.match(ROOT_MODULE_RE) || []).shift();
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
function getVersion(pModuleName) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
}
|