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
package/src/extract/helpers.mjs
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
import { extname } from "node:path";
|
|
2
2
|
|
|
3
3
|
export function dependenciesEqual(pLeftDependency) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
// As we're using this to compare (typescript) pre-compilation dependencies
|
|
5
|
+
// with post-compilation dependencies we do not consider the moduleSystem.
|
|
6
|
+
//
|
|
7
|
+
// In typescript the module system will typically be es6. Compiled down to
|
|
8
|
+
// javascript it can be es6, but also cjs (depends on the `module` setting
|
|
9
|
+
// in your tsconfig). In the latter case, we're still looking at the same
|
|
10
|
+
// dependency even though the module systems differ.
|
|
11
|
+
return (pRightDependency) =>
|
|
12
|
+
pLeftDependency.module === pRightDependency.module &&
|
|
13
|
+
pLeftDependency.dynamic === pRightDependency.dynamic &&
|
|
14
|
+
pLeftDependency.exoticRequire === pRightDependency.exoticRequire;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export function detectPreCompilationNess(pTSDependencies, pJSDependencies) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
return pTSDependencies.map((pTSDependency) =>
|
|
19
|
+
pJSDependencies.some(dependenciesEqual(pTSDependency))
|
|
20
|
+
? { ...pTSDependency, preCompilationOnly: false }
|
|
21
|
+
: {
|
|
22
|
+
...pTSDependency,
|
|
23
|
+
preCompilationOnly: true,
|
|
24
|
+
dependencyTypes: (pTSDependency.dependencyTypes || []).concat(
|
|
25
|
+
"pre-compilation-only",
|
|
26
|
+
),
|
|
27
|
+
},
|
|
28
|
+
);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const PROTOCOL_ONLY_BUILTINS = new Set([
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
// module.builtinModules.filter(m=>m.startsWith('node:'))
|
|
33
|
+
"node:sea",
|
|
34
|
+
"node:sqlite",
|
|
35
|
+
"node:test",
|
|
36
|
+
"node:test/reporters",
|
|
37
|
+
// module.builtinModules.filter(m=>m.startsWith('bun:'))
|
|
38
|
+
"bun:ffi",
|
|
39
|
+
"bun:jsc",
|
|
40
|
+
"bun:sqlite",
|
|
41
|
+
"bun:test",
|
|
42
|
+
"bun:wrap",
|
|
43
43
|
]);
|
|
44
44
|
|
|
45
45
|
/**
|
|
@@ -49,14 +49,14 @@ const PROTOCOL_ONLY_BUILTINS = new Set([
|
|
|
49
49
|
* @returns {string}
|
|
50
50
|
*/
|
|
51
51
|
function getCanonicalModuleName(pModuleName, pProtocol) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
const lModuleWithProtocol = pProtocol + pModuleName;
|
|
53
|
+
const lIsJsIshProtocol = pProtocol === "node:" || pProtocol === "bun:";
|
|
54
|
+
const lIsProtocolOnlyModule = PROTOCOL_ONLY_BUILTINS.has(lModuleWithProtocol);
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
if (!lIsJsIshProtocol || lIsProtocolOnlyModule) {
|
|
57
|
+
return lModuleWithProtocol;
|
|
58
|
+
}
|
|
59
|
+
return pModuleName;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
/**
|
|
@@ -75,26 +75,26 @@ function getCanonicalModuleName(pModuleName, pProtocol) {
|
|
|
75
75
|
*/
|
|
76
76
|
// eslint-disable-next-line complexity
|
|
77
77
|
export function extractModuleAttributes(pString) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
let lReturnValue = { module: pString };
|
|
79
|
+
const lModuleAttributes = pString.match(
|
|
80
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
81
|
+
/^(?<protocol>node:|file:|data:|bun:)(?:(?<mimeType>[^,]+),)?(?<module>.+)$/,
|
|
82
|
+
);
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
84
|
+
if (lModuleAttributes?.groups) {
|
|
85
|
+
lReturnValue.module = getCanonicalModuleName(
|
|
86
|
+
lModuleAttributes?.groups.module,
|
|
87
|
+
lModuleAttributes?.groups.protocol,
|
|
88
|
+
);
|
|
89
|
+
if (lModuleAttributes?.groups?.protocol) {
|
|
90
|
+
lReturnValue.protocol = lModuleAttributes.groups.protocol;
|
|
91
|
+
}
|
|
92
|
+
if (lModuleAttributes?.groups?.mimeType) {
|
|
93
|
+
lReturnValue.mimeType = lModuleAttributes.groups.mimeType;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
return lReturnValue;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -108,25 +108,27 @@ export function extractModuleAttributes(pString) {
|
|
|
108
108
|
* @returns {string} the stripped string
|
|
109
109
|
*/
|
|
110
110
|
export function stripQueryParameters(pFilenameString) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
// url.parse(pFilenameString).pathname did this, but it's
|
|
112
|
+
// deprecated, hence this funky RE replace.
|
|
113
|
+
return pFilenameString.replace(/\?.+$/, "");
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
const TS_COMPATIBLE_EXTENSIONS = new Set([
|
|
117
|
+
".ts",
|
|
118
|
+
".tsx",
|
|
119
|
+
".mts",
|
|
120
|
+
".cts",
|
|
121
|
+
".js",
|
|
122
|
+
".mjs",
|
|
123
|
+
".cjs",
|
|
124
|
+
".vue",
|
|
125
|
+
]);
|
|
126
|
+
|
|
116
127
|
/**
|
|
117
128
|
* Returns true if the file name has a TypeScript compatible extension
|
|
118
129
|
* @param {string} pFileName
|
|
119
130
|
* @returns {boolean}
|
|
120
131
|
*/
|
|
121
132
|
export function isTypeScriptCompatible(pFileName) {
|
|
122
|
-
|
|
123
|
-
".ts",
|
|
124
|
-
".tsx",
|
|
125
|
-
".mts",
|
|
126
|
-
".cts",
|
|
127
|
-
".js",
|
|
128
|
-
".mjs",
|
|
129
|
-
".cjs",
|
|
130
|
-
".vue",
|
|
131
|
-
].includes(extname(pFileName));
|
|
133
|
+
return TS_COMPATIBLE_EXTENSIONS.has(extname(pFileName));
|
|
132
134
|
}
|
package/src/extract/index.mjs
CHANGED
|
@@ -11,131 +11,131 @@ import { bus } from "#utl/bus.mjs";
|
|
|
11
11
|
|
|
12
12
|
/* eslint max-params:0 , max-lines-per-function:0*/
|
|
13
13
|
function extractRecursive(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
pFileName,
|
|
15
|
+
pCruiseOptions,
|
|
16
|
+
pVisited,
|
|
17
|
+
pDepth,
|
|
18
|
+
pResolveOptions,
|
|
19
|
+
pTranspileOptions,
|
|
20
20
|
) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
21
|
+
pVisited.add(pFileName);
|
|
22
|
+
const lDependencies =
|
|
23
|
+
pCruiseOptions.maxDepth <= 0 || pDepth < pCruiseOptions.maxDepth
|
|
24
|
+
? extractDependencies(
|
|
25
|
+
pFileName,
|
|
26
|
+
pCruiseOptions,
|
|
27
|
+
pResolveOptions,
|
|
28
|
+
pTranspileOptions,
|
|
29
|
+
)
|
|
30
|
+
: [];
|
|
31
|
+
const lReturnValue = [
|
|
32
|
+
{
|
|
33
|
+
source: pFileName,
|
|
34
|
+
...(pCruiseOptions.experimentalStats
|
|
35
|
+
? {
|
|
36
|
+
experimentalStats: extractStats(
|
|
37
|
+
pFileName,
|
|
38
|
+
pCruiseOptions,
|
|
39
|
+
pTranspileOptions,
|
|
40
|
+
),
|
|
41
|
+
}
|
|
42
|
+
: {}),
|
|
43
|
+
dependencies: lDependencies,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
47
|
+
// eslint-disable-next-line budapestian/local-variable-pattern
|
|
48
|
+
for (const { resolved, followable, matchesDoNotFollow } of lDependencies) {
|
|
49
|
+
if (followable && !matchesDoNotFollow && !pVisited.has(resolved)) {
|
|
50
|
+
lReturnValue.push(
|
|
51
|
+
...extractRecursive(
|
|
52
|
+
resolved,
|
|
53
|
+
pCruiseOptions,
|
|
54
|
+
pVisited,
|
|
55
|
+
pDepth + 1,
|
|
56
|
+
pResolveOptions,
|
|
57
|
+
pTranspileOptions,
|
|
58
|
+
),
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return lReturnValue;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
function extractFileDirectoryArray(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
pFileDirectoryArray,
|
|
67
|
+
pCruiseOptions,
|
|
68
|
+
pResolveOptions,
|
|
69
|
+
pTranspileOptions,
|
|
70
70
|
) {
|
|
71
|
-
|
|
71
|
+
let lVisited = new Set();
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
bus.info("read files: gather initial sources");
|
|
74
|
+
const lInitialSources = gatherInitialSources(
|
|
75
|
+
pFileDirectoryArray,
|
|
76
|
+
pCruiseOptions,
|
|
77
|
+
);
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
79
|
+
bus.info("read files: visit dependencies");
|
|
80
|
+
const lResult = [];
|
|
81
|
+
for (const lFilename of lInitialSources) {
|
|
82
|
+
if (!lVisited.has(lFilename)) {
|
|
83
|
+
lVisited.add(lFilename);
|
|
84
|
+
lResult.push(
|
|
85
|
+
...extractRecursive(
|
|
86
|
+
lFilename,
|
|
87
|
+
pCruiseOptions,
|
|
88
|
+
lVisited,
|
|
89
|
+
0,
|
|
90
|
+
pResolveOptions,
|
|
91
|
+
pTranspileOptions,
|
|
92
|
+
),
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return lResult;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
function isNotFollowable({ followable }) {
|
|
100
|
-
|
|
100
|
+
return !followable;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
function notInFromListAlready(pFromList) {
|
|
104
|
-
|
|
104
|
+
return ({ resolved }) => !pFromList.some(({ source }) => source === resolved);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
function toDependencyToSource(pToListItem) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
108
|
+
return {
|
|
109
|
+
source: pToListItem.resolved,
|
|
110
|
+
followable: pToListItem.followable,
|
|
111
|
+
coreModule: pToListItem.coreModule,
|
|
112
|
+
couldNotResolve: pToListItem.couldNotResolve,
|
|
113
|
+
matchesDoNotFollow: pToListItem.matchesDoNotFollow,
|
|
114
|
+
dependencyTypes: pToListItem.dependencyTypes,
|
|
115
|
+
dependencies: [],
|
|
116
|
+
};
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
function complete(pAll, pFromListItem) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
120
|
+
return pAll
|
|
121
|
+
.concat(pFromListItem)
|
|
122
|
+
.concat(
|
|
123
|
+
pFromListItem.dependencies
|
|
124
|
+
.filter(isNotFollowable)
|
|
125
|
+
.filter(notInFromListAlready(pAll))
|
|
126
|
+
.map(toDependencyToSource),
|
|
127
|
+
);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
function filterExcludedDynamicDependencies(pModule, pExclude) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
131
|
+
// no need to do the 'path' thing as that was addressed in extractFileDirectoryArray already
|
|
132
|
+
return {
|
|
133
|
+
...pModule,
|
|
134
|
+
dependencies: pModule.dependencies.filter(
|
|
135
|
+
({ dynamic }) =>
|
|
136
|
+
!Object.hasOwn(pExclude, "dynamic") || pExclude.dynamic !== dynamic,
|
|
137
|
+
),
|
|
138
|
+
};
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
/**
|
|
@@ -149,24 +149,24 @@ function filterExcludedDynamicDependencies(pModule, pExclude) {
|
|
|
149
149
|
* @returns {Partial<IModule[]>}
|
|
150
150
|
*/
|
|
151
151
|
export default function extract(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
pFileDirectoryArray,
|
|
153
|
+
pCruiseOptions,
|
|
154
|
+
pResolveOptions,
|
|
155
|
+
pTranspileOptions,
|
|
156
156
|
) {
|
|
157
|
-
|
|
157
|
+
clearCaches();
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
159
|
+
const lReturnValue = extractFileDirectoryArray(
|
|
160
|
+
pFileDirectoryArray,
|
|
161
|
+
pCruiseOptions,
|
|
162
|
+
pResolveOptions,
|
|
163
|
+
pTranspileOptions,
|
|
164
|
+
)
|
|
165
|
+
.reduce(complete, [])
|
|
166
|
+
.map((pModule) =>
|
|
167
|
+
filterExcludedDynamicDependencies(pModule, pCruiseOptions.exclude),
|
|
168
|
+
);
|
|
169
|
+
pResolveOptions.fileSystem.purge();
|
|
170
|
+
clearCaches();
|
|
171
|
+
return lReturnValue;
|
|
172
172
|
}
|