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
|
@@ -5,273 +5,273 @@ import meta from "#meta.cjs";
|
|
|
5
5
|
|
|
6
6
|
/** @type {import('@swc/core/Visitor')} */
|
|
7
7
|
const { Visitor } = await tryImport(
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
"@swc/core/Visitor.js",
|
|
9
|
+
meta.supportedTranspilers.swc,
|
|
10
10
|
);
|
|
11
11
|
|
|
12
12
|
function pryStringsFromArguments(pArguments) {
|
|
13
|
-
|
|
13
|
+
let lReturnValue = null;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
if (pArguments[0].expression.type === "StringLiteral") {
|
|
16
|
+
lReturnValue = pArguments[0].expression.value;
|
|
17
|
+
} else if (pArguments[0].expression.type === "TemplateLiteral") {
|
|
18
|
+
/* c8 ignore start */
|
|
19
|
+
// @swc/core@1.2.159 and before: cooked.value.
|
|
20
|
+
// @swc/core@1.2.160 and after: just cooked
|
|
21
|
+
lReturnValue =
|
|
22
|
+
pArguments[0].expression.quasis[0].cooked.value ||
|
|
23
|
+
pArguments[0].expression.quasis[0].cooked;
|
|
24
|
+
}
|
|
25
|
+
/* c8 ignore stop */
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
return lReturnValue;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function isPlaceholderlessTemplateLiteral(pArgument) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
return (
|
|
32
|
+
pArgument.expression.type === "TemplateLiteral" &&
|
|
33
|
+
pArgument.expression.quasis.length === 1 &&
|
|
34
|
+
pArgument.expression.expressions.length === 0
|
|
35
|
+
);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
function argumentsAreUsable(pArguments) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
return (
|
|
40
|
+
pArguments.length > 0 &&
|
|
41
|
+
["StringLiteral", "TemplateLiteral"].includes(
|
|
42
|
+
pArguments[0].expression.type,
|
|
43
|
+
) &&
|
|
44
|
+
(pArguments[0].expression.type !== "TemplateLiteral" ||
|
|
45
|
+
isPlaceholderlessTemplateLiteral(pArguments[0]))
|
|
46
|
+
);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
function chunkIntoThing(pString) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
const lChunks = pString.split(".");
|
|
51
|
+
return {
|
|
52
|
+
object: lChunks[0],
|
|
53
|
+
property: lChunks[1],
|
|
54
|
+
string: pString,
|
|
55
|
+
};
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// to recognize exotic requires like 'window.require'
|
|
59
59
|
function extractExoticMemberCallExpression(pNode, pExoticRequireStrings) {
|
|
60
|
-
|
|
60
|
+
let lReturnValue = [];
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
62
|
+
if (pNode.callee.type === "MemberExpression") {
|
|
63
|
+
lReturnValue = pExoticRequireStrings
|
|
64
|
+
.filter((pString) => pString.includes("."))
|
|
65
|
+
.map(chunkIntoThing)
|
|
66
|
+
.reduce((pAll, pThing) => {
|
|
67
|
+
if (
|
|
68
|
+
pNode.callee.object.value === pThing.object &&
|
|
69
|
+
pNode.callee.property.value === pThing.property &&
|
|
70
|
+
argumentsAreUsable(pNode.arguments)
|
|
71
|
+
) {
|
|
72
|
+
return pAll.concat({
|
|
73
|
+
module: pryStringsFromArguments(pNode.arguments),
|
|
74
|
+
moduleSystem: "cjs",
|
|
75
|
+
exoticallyRequired: true,
|
|
76
|
+
exoticRequire: pThing.string,
|
|
77
|
+
dynamic: false,
|
|
78
|
+
dependencyTypes: ["exotic-require"],
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return pAll;
|
|
82
|
+
}, []);
|
|
83
|
+
}
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
return lReturnValue;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
function isImportCallExpression(pNode) {
|
|
89
|
-
|
|
89
|
+
/*
|
|
90
90
|
somewhere between swc 1.2.123 and 1.2.133 the swc AST started to
|
|
91
91
|
represent import call expressions with .callee.type === "Import"
|
|
92
92
|
instead of .callee.value === "import". Keeping both detection
|
|
93
93
|
methods in here for backwards compatibility
|
|
94
94
|
*/
|
|
95
|
-
|
|
95
|
+
return pNode.callee.value === "import" || pNode.callee.type === "Import";
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
function isNonExoticallyRequiredExpression(pNode) {
|
|
99
|
-
|
|
99
|
+
return pNode.callee.value === "require" || isImportCallExpression(pNode);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
function isInterestingCallExpression(pExoticRequireStrings, pNode) {
|
|
103
|
-
|
|
103
|
+
/*
|
|
104
104
|
somewhere between swc 1.2.123 and 1.2.133 the swc AST started to
|
|
105
105
|
represent import call expressions with .callee.type === "Import"
|
|
106
106
|
instead of .callee.value === "import". Keeping both detection
|
|
107
107
|
methods in here for backwards compatibility
|
|
108
108
|
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
return (
|
|
110
|
+
pNode.callee.type === "Import" ||
|
|
111
|
+
["require", "import"]
|
|
112
|
+
.concat(pExoticRequireStrings.filter((pString) => !pString.includes(".")))
|
|
113
|
+
.includes(pNode.callee.value)
|
|
114
|
+
);
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
export default Visitor
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
? class SwcDependencyVisitor extends Visitor {
|
|
119
|
+
#exoticRequireStrings;
|
|
120
|
+
#result;
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
122
|
+
constructor(pExoticRequireStrings) {
|
|
123
|
+
super();
|
|
124
|
+
this.#exoticRequireStrings = pExoticRequireStrings;
|
|
125
|
+
}
|
|
126
126
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
127
|
+
#pushExportSource(pNode) {
|
|
128
|
+
if (pNode.source) {
|
|
129
|
+
this.#result.push({
|
|
130
|
+
module: pNode.source.value,
|
|
131
|
+
moduleSystem: "es6",
|
|
132
|
+
exoticallyRequired: false,
|
|
133
|
+
dependencyTypes: ["export"],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
137
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
138
|
+
#pushImportSource(pNode) {
|
|
139
|
+
if (pNode.source) {
|
|
140
|
+
this.#result.push({
|
|
141
|
+
module: pNode.source.value,
|
|
142
|
+
moduleSystem: "es6",
|
|
143
|
+
exoticallyRequired: false,
|
|
144
|
+
dependencyTypes: ["import"],
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
visitImportDeclaration(pNode) {
|
|
150
|
+
this.#pushImportSource(pNode);
|
|
151
|
+
return super.visitImportDeclaration(pNode);
|
|
152
|
+
}
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
154
|
+
visitTsImportEqualsDeclaration(pNode) {
|
|
155
|
+
if (pNode.moduleRef.type === "TsExternalModuleReference") {
|
|
156
|
+
this.#result.push({
|
|
157
|
+
module: pNode.moduleRef.expression.value,
|
|
158
|
+
moduleSystem: "cjs",
|
|
159
|
+
exoticallyRequired: false,
|
|
160
|
+
dependencyTypes: ["import-equals"],
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return super.visitTsImportEqualsDeclaration(pNode);
|
|
164
|
+
}
|
|
165
165
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
166
|
+
// note: super class contains a typo. This will eventually be corrected.
|
|
167
|
+
// To anticipate that (and to remain backward compatible when that happens)
|
|
168
|
+
// also include the same method, but with the correct spelling.
|
|
169
|
+
visitExportAllDeclration(pNode) {
|
|
170
|
+
this.#pushExportSource(pNode);
|
|
171
|
+
/* c8 ignore start */
|
|
172
|
+
// @ts-expect-error see above
|
|
173
|
+
if (super.visitExportAllDeclration) {
|
|
174
|
+
// @ts-expect-error see above
|
|
175
|
+
return super.visitExportAllDeclration(pNode);
|
|
176
|
+
} else {
|
|
177
|
+
/* c8 ignore stop */
|
|
178
|
+
return super.visitExportAllDeclaration(pNode);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
181
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
/* c8 ignore start */
|
|
183
|
+
visitExportAllDeclaration(pNode) {
|
|
184
|
+
return this.visitExportAllDeclration(pNode);
|
|
185
|
+
}
|
|
186
|
+
/* c8 ignore stop */
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
188
|
+
// same spelling error as the above - same solution
|
|
189
|
+
visitExportNamedDeclration(pNode) {
|
|
190
|
+
this.#pushExportSource(pNode);
|
|
191
|
+
/* c8 ignore start */
|
|
192
|
+
// @ts-expect-error see above
|
|
193
|
+
if (super.visitExportNamedDeclration) {
|
|
194
|
+
// @ts-expect-error see above
|
|
195
|
+
return super.visitExportNamedDeclration(pNode);
|
|
196
|
+
} else {
|
|
197
|
+
/* c8 ignore stop */
|
|
198
|
+
return super.visitExportNamedDeclaration(pNode);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/* c8 ignore start */
|
|
202
|
+
visitExportNamedDeclaration(pNode) {
|
|
203
|
+
return this.visitExportNamedDeclration(pNode);
|
|
204
|
+
}
|
|
205
|
+
/* c8 ignore stop */
|
|
206
206
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
207
|
+
visitCallExpression(pNode) {
|
|
208
|
+
if (
|
|
209
|
+
isInterestingCallExpression(this.#exoticRequireStrings, pNode) &&
|
|
210
|
+
argumentsAreUsable(pNode.arguments)
|
|
211
|
+
) {
|
|
212
|
+
this.#result.push({
|
|
213
|
+
module: pryStringsFromArguments(pNode.arguments),
|
|
214
214
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
215
|
+
...(isImportCallExpression(pNode)
|
|
216
|
+
? {
|
|
217
|
+
moduleSystem: "es6",
|
|
218
|
+
dynamic: true,
|
|
219
|
+
dependencyTypes: ["dynamic-import"],
|
|
220
|
+
}
|
|
221
|
+
: {
|
|
222
|
+
moduleSystem: "cjs",
|
|
223
|
+
dynamic: false,
|
|
224
|
+
dependencyTypes: ["require"],
|
|
225
|
+
}),
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
227
|
+
...(isNonExoticallyRequiredExpression(pNode)
|
|
228
|
+
? { exoticallyRequired: false }
|
|
229
|
+
: {
|
|
230
|
+
exoticallyRequired: true,
|
|
231
|
+
exoticRequire: pNode.callee.value,
|
|
232
|
+
dependencyTypes: ["exotic-require"],
|
|
233
|
+
}),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
236
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
237
|
+
// using "window.require" as an exotic require string...
|
|
238
|
+
this.#result = this.#result.concat(
|
|
239
|
+
extractExoticMemberCallExpression(pNode, this.#exoticRequireStrings),
|
|
240
|
+
);
|
|
241
241
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
242
|
+
return super.visitCallExpression(pNode);
|
|
243
|
+
}
|
|
244
|
+
/* c8 ignore start */
|
|
245
|
+
visitTsType(pNode) {
|
|
246
|
+
// override so the 'visitTsType not implemented' error message
|
|
247
|
+
// as defined in the super class doesn't appear
|
|
248
|
+
return pNode;
|
|
249
|
+
}
|
|
250
|
+
/* c8 ignore stop */
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
252
|
+
visitTsTypeAnnotation(pNode) {
|
|
253
|
+
// as visitors for some shapes of type annotations aren't completely
|
|
254
|
+
// implemented yet (1.2.51) pNode can come in as null (also see
|
|
255
|
+
// comments in accompanying unit test)
|
|
256
|
+
if (pNode && pNode.typeAnnotation && pNode.typeAnnotation.argument)
|
|
257
|
+
this.#result.push({
|
|
258
|
+
module: pNode.typeAnnotation.argument.value,
|
|
259
|
+
moduleSystem: "es6",
|
|
260
|
+
exoticallyRequired: false,
|
|
261
|
+
dependencyTypes: ["type-import"],
|
|
262
|
+
});
|
|
263
|
+
return super.visitTsTypeAnnotation(pNode);
|
|
264
|
+
}
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
266
|
+
// as far as I can tell swc doesn't do tripple slash directives (yet?)
|
|
267
|
+
// visitTrippleSlashDirective(pNode)) {}
|
|
268
268
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
269
|
+
getDependencies(pAST) {
|
|
270
|
+
this.#result = [];
|
|
271
|
+
this.visitModule(pAST);
|
|
272
|
+
return this.#result;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
: /* c8 ignore start */
|
|
276
|
+
class Empty {};
|
|
277
277
|
/* c8 ignore stop */
|
|
@@ -6,8 +6,8 @@ import SwcDependencyVisitor from "./dependency-visitor.mjs";
|
|
|
6
6
|
* @returns {{module: string, moduleSystem: string, dynamic: boolean}[]}
|
|
7
7
|
*/
|
|
8
8
|
export default function extractSwcDependencies(pSwcAST, pExoticRequireStrings) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const visitor = new SwcDependencyVisitor(pExoticRequireStrings);
|
|
10
|
+
return visitor
|
|
11
|
+
.getDependencies(pSwcAST)
|
|
12
|
+
.map((pModule) => ({ dynamic: false, ...pModule }));
|
|
13
13
|
}
|
|
@@ -4,15 +4,15 @@ import extractSwcDeps from "./extract-swc-deps.mjs";
|
|
|
4
4
|
import { getASTCached, isAvailable } from "./parse.mjs";
|
|
5
5
|
|
|
6
6
|
export function shouldUse({ parser }, pFileName) {
|
|
7
|
-
|
|
7
|
+
return parser === "swc" && isAvailable() && isTypeScriptCompatible(pFileName);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export function extract(
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
{ baseDir, exoticRequireStrings, moduleSystems },
|
|
12
|
+
pFileName,
|
|
13
13
|
) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
return extractSwcDeps(
|
|
15
|
+
getASTCached(join(baseDir, pFileName)),
|
|
16
|
+
exoticRequireStrings,
|
|
17
|
+
).filter(({ moduleSystem }) => moduleSystems.includes(moduleSystem));
|
|
18
18
|
}
|
|
@@ -11,23 +11,23 @@ const swc = await tryImport("@swc/core", meta.supportedTranspilers.swc);
|
|
|
11
11
|
|
|
12
12
|
/** @type {ParseOptions} */
|
|
13
13
|
const SWC_PARSE_OPTIONS = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
dynamicImport: true,
|
|
15
|
+
// typescript is a superset of ecmascript, so we use typescript always
|
|
16
|
+
syntax: "typescript",
|
|
17
|
+
// target doesn't have effect on parsing it seems
|
|
18
|
+
target: "es2022",
|
|
19
|
+
// allow for decorators
|
|
20
|
+
decorators: true,
|
|
21
|
+
// TODO: {tj}sx ?
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
export function getASTFromSource(pSource) {
|
|
25
|
-
|
|
25
|
+
return swc.parseSync(pSource, SWC_PARSE_OPTIONS);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
function getAST(pFileName) {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
/** @type {swcCore swc} */
|
|
30
|
+
return swc.parseFileSync(pFileName, SWC_PARSE_OPTIONS);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/**
|
|
@@ -41,7 +41,7 @@ function getAST(pFileName) {
|
|
|
41
41
|
export const getASTCached = memoize(getAST);
|
|
42
42
|
|
|
43
43
|
export function clearCache() {
|
|
44
|
-
|
|
44
|
+
memoizeClear(getASTCached);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/**
|
|
@@ -4,15 +4,15 @@ import meta from "#meta.cjs";
|
|
|
4
4
|
const babel = await tryImport("@babel/core", meta.supportedTranspilers.babel);
|
|
5
5
|
|
|
6
6
|
export default {
|
|
7
|
-
|
|
7
|
+
isAvailable: () => babel !== false,
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
version: () => `@babel/core@${babel.version}`,
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
transpile: (pSource, pFileName, pTranspileOptions = {}) =>
|
|
12
|
+
babel.transformSync(pSource, {
|
|
13
|
+
...(pTranspileOptions.babelConfig || {}),
|
|
14
|
+
// Some babel plugins assume a piece of source to have a filename.
|
|
15
|
+
// See https://github.com/sverweij/dependency-cruiser/issues/410
|
|
16
|
+
filename: pFileName,
|
|
17
|
+
}).code,
|
|
18
18
|
};
|
|
@@ -7,34 +7,34 @@ import meta from "#meta.cjs";
|
|
|
7
7
|
* As long as that is happening: first try coffeescript, then coffee-script.
|
|
8
8
|
*/
|
|
9
9
|
async function getCoffeeScriptModule() {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
let lReturnValue = await tryImport(
|
|
11
|
+
"coffeescript",
|
|
12
|
+
meta.supportedTranspilers.coffeescript,
|
|
13
|
+
);
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
/* c8 ignore start */
|
|
16
|
+
if (lReturnValue === false) {
|
|
17
|
+
lReturnValue = await tryImport(
|
|
18
|
+
"coffee-script",
|
|
19
|
+
meta.supportedTranspilers["coffee-script"],
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
/* c8 ignore stop */
|
|
23
|
+
return lReturnValue;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const coffeeScript = await getCoffeeScriptModule();
|
|
27
27
|
|
|
28
28
|
export default function coffeeScriptWrap(pLiterate) {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
return {
|
|
30
|
+
isAvailable: () => coffeeScript !== false,
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
version: () => `coffeescript@${coffeeScript.VERSION}`,
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
transpile: (pSource) => {
|
|
35
|
+
const lOptions = pLiterate ? { literate: true } : {};
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
return coffeeScript.compile(pSource, lOptions);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
40
|
}
|