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
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { join, extname, dirname } from "node:path";
|
|
2
2
|
import { extract as acornExtract } from "./acorn/extract.mjs";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
extract as tscExtract,
|
|
5
|
+
shouldUse as tscShouldUse,
|
|
6
6
|
} from "./tsc/extract.mjs";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
extract as swcExtract,
|
|
9
|
+
shouldUse as swcShouldUse,
|
|
10
10
|
} from "./swc/extract.mjs";
|
|
11
11
|
import resolve from "./resolve/index.mjs";
|
|
12
12
|
import {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
detectPreCompilationNess,
|
|
14
|
+
extractModuleAttributes,
|
|
15
15
|
} from "./helpers.mjs";
|
|
16
16
|
import { uniqBy, intersects } from "#utl/array-util.mjs";
|
|
17
17
|
|
|
@@ -21,15 +21,15 @@ import { uniqBy, intersects } from "#utl/array-util.mjs";
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
function extractWithTsc(pCruiseOptions, pFileName, pTranspileOptions) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
let lDependencies = tscExtract(pCruiseOptions, pFileName, pTranspileOptions);
|
|
25
|
+
|
|
26
|
+
if (pCruiseOptions.tsPreCompilationDeps === "specify") {
|
|
27
|
+
lDependencies = detectPreCompilationNess(
|
|
28
|
+
lDependencies,
|
|
29
|
+
acornExtract(pCruiseOptions, pFileName, pTranspileOptions),
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return lDependencies;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -38,15 +38,15 @@ function extractWithTsc(pCruiseOptions, pFileName, pTranspileOptions) {
|
|
|
38
38
|
* @returns {(IStrictCruiseOptions, string, any) => IDependency[]}
|
|
39
39
|
*/
|
|
40
40
|
function determineExtractionFunction(pCruiseOptions, pFileName) {
|
|
41
|
-
|
|
41
|
+
let lExtractionFunction = acornExtract;
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
if (tscShouldUse(pCruiseOptions, pFileName)) {
|
|
44
|
+
lExtractionFunction = extractWithTsc;
|
|
45
|
+
} else if (swcShouldUse(pCruiseOptions, pFileName)) {
|
|
46
|
+
lExtractionFunction = swcExtract;
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
return lExtractionFunction;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/**
|
|
@@ -56,65 +56,65 @@ function determineExtractionFunction(pCruiseOptions, pFileName) {
|
|
|
56
56
|
* @returns {IDependency[]}
|
|
57
57
|
*/
|
|
58
58
|
function extractDependencies(pCruiseOptions, pFileName, pTranspileOptions) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
59
|
+
/** @type IDependency[] */
|
|
60
|
+
let lDependencies = [];
|
|
61
|
+
|
|
62
|
+
if (!pCruiseOptions.extraExtensionsToScan.includes(extname(pFileName))) {
|
|
63
|
+
const lExtractionFunction = determineExtractionFunction(
|
|
64
|
+
pCruiseOptions,
|
|
65
|
+
pFileName,
|
|
66
|
+
);
|
|
67
|
+
lDependencies = lExtractionFunction(
|
|
68
|
+
pCruiseOptions,
|
|
69
|
+
pFileName,
|
|
70
|
+
pTranspileOptions,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return lDependencies.map((pDependency) => ({
|
|
75
|
+
...pDependency,
|
|
76
|
+
...extractModuleAttributes(pDependency.module),
|
|
77
|
+
}));
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
function matchesDoNotFollow({ resolved, dependencyTypes }, pDoNotFollow) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
const lMatchesPath = pDoNotFollow.path
|
|
82
|
+
? RegExp(pDoNotFollow.path, "g").test(resolved)
|
|
83
|
+
: false;
|
|
84
|
+
const lMatchesDependencyTypes = pDoNotFollow.dependencyTypes
|
|
85
|
+
? intersects(dependencyTypes, pDoNotFollow.dependencyTypes)
|
|
86
|
+
: false;
|
|
87
|
+
|
|
88
|
+
return lMatchesPath || lMatchesDependencyTypes;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
function addResolutionAttributes(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
{ baseDir, doNotFollow },
|
|
93
|
+
pFileName,
|
|
94
|
+
pResolveOptions,
|
|
95
|
+
pTranspileOptions,
|
|
96
96
|
) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
97
|
+
return function addAttributes(pDependency) {
|
|
98
|
+
const lResolved = resolve(
|
|
99
|
+
pDependency,
|
|
100
|
+
baseDir,
|
|
101
|
+
join(baseDir, dirname(pFileName)),
|
|
102
|
+
pResolveOptions,
|
|
103
|
+
pTranspileOptions,
|
|
104
|
+
);
|
|
105
|
+
const lMatchesDoNotFollow = matchesDoNotFollow(lResolved, doNotFollow);
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
...pDependency,
|
|
109
|
+
...lResolved,
|
|
110
|
+
followable: lResolved.followable && !lMatchesDoNotFollow,
|
|
111
|
+
matchesDoNotFollow: lMatchesDoNotFollow,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
function matchesPattern(pFullPathToFile, pPattern) {
|
|
117
|
-
|
|
117
|
+
return RegExp(pPattern, "g").test(pFullPathToFile);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
/**
|
|
@@ -123,17 +123,17 @@ function matchesPattern(pFullPathToFile, pPattern) {
|
|
|
123
123
|
* @returns {string}
|
|
124
124
|
*/
|
|
125
125
|
function getDependencyUniqueKey({ module, moduleSystem, dependencyTypes }) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
126
|
+
// c8: dependencyTypes is hardly ever undefined anymore since PR #884, but
|
|
127
|
+
// we keep the `|| []` in for robustness sake
|
|
128
|
+
return `${module} ${moduleSystem} ${(dependencyTypes || []).includes(
|
|
129
|
+
"type-only",
|
|
130
|
+
)}`;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
function compareDeps(pLeft, pRight) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
return getDependencyUniqueKey(pLeft).localeCompare(
|
|
135
|
+
getDependencyUniqueKey(pRight),
|
|
136
|
+
);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
/**
|
|
@@ -156,35 +156,35 @@ function compareDeps(pLeft, pRight) {
|
|
|
156
156
|
* @return {IDependency[]} an array of dependency objects (see above)
|
|
157
157
|
*/
|
|
158
158
|
export default function getDependencies(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
159
|
+
pFileName,
|
|
160
|
+
pCruiseOptions,
|
|
161
|
+
pResolveOptions,
|
|
162
|
+
pTranspileOptions,
|
|
163
163
|
) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
164
|
+
try {
|
|
165
|
+
return uniqBy(
|
|
166
|
+
extractDependencies(pCruiseOptions, pFileName, pTranspileOptions),
|
|
167
|
+
getDependencyUniqueKey,
|
|
168
|
+
)
|
|
169
|
+
.sort(compareDeps)
|
|
170
|
+
.map(
|
|
171
|
+
addResolutionAttributes(
|
|
172
|
+
pCruiseOptions,
|
|
173
|
+
pFileName,
|
|
174
|
+
pResolveOptions,
|
|
175
|
+
pTranspileOptions,
|
|
176
|
+
),
|
|
177
|
+
)
|
|
178
|
+
.filter(
|
|
179
|
+
({ resolved }) =>
|
|
180
|
+
(!pCruiseOptions?.exclude?.path ||
|
|
181
|
+
!matchesPattern(resolved, pCruiseOptions.exclude.path)) &&
|
|
182
|
+
(!pCruiseOptions?.includeOnly?.path ||
|
|
183
|
+
matchesPattern(resolved, pCruiseOptions.includeOnly.path)),
|
|
184
|
+
);
|
|
185
|
+
} catch (pError) {
|
|
186
|
+
throw new Error(
|
|
187
|
+
`Extracting dependencies ran afoul of...\n\n ${pError.message}\n... in ${pFileName}\n\n`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
190
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
getStats as tscStats,
|
|
3
|
+
shouldUse as tscShouldUse,
|
|
4
4
|
} from "./tsc/extract.mjs";
|
|
5
5
|
import { getStats as acornStats } from "./acorn/extract.mjs";
|
|
6
6
|
|
|
@@ -15,13 +15,13 @@ import { getStats as acornStats } from "./acorn/extract.mjs";
|
|
|
15
15
|
* @returns {(IStrictCruiseOptions, string, any) => IDependency[]}
|
|
16
16
|
*/
|
|
17
17
|
function determineExtractionFunction(pCruiseOptions, pFileName) {
|
|
18
|
-
|
|
18
|
+
let lExtractionFunction = acornStats;
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
if (tscShouldUse(pCruiseOptions, pFileName)) {
|
|
21
|
+
lExtractionFunction = tscStats;
|
|
22
|
+
}
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
return lExtractionFunction;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -35,19 +35,19 @@ function determineExtractionFunction(pCruiseOptions, pFileName) {
|
|
|
35
35
|
* @return {IDependency[]} an array of dependency objects (see above)
|
|
36
36
|
*/
|
|
37
37
|
export default function extractStats(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
pFileName,
|
|
39
|
+
pCruiseOptions,
|
|
40
|
+
pTranspileOptions,
|
|
41
41
|
) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
try {
|
|
43
|
+
return determineExtractionFunction(pCruiseOptions, pFileName)(
|
|
44
|
+
pCruiseOptions,
|
|
45
|
+
pFileName,
|
|
46
|
+
pTranspileOptions,
|
|
47
|
+
);
|
|
48
|
+
} catch (pError) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
`Extracting stats ran afoul of...\n\n ${pError.message}\n... in ${pFileName}\n\n`,
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
53
|
}
|
|
@@ -17,27 +17,27 @@ import pathToPosix from "#utl/path-to-posix.mjs";
|
|
|
17
17
|
* @returns {string[]}
|
|
18
18
|
*/
|
|
19
19
|
function getScannableExtensions(pOptions) {
|
|
20
|
-
|
|
20
|
+
return scannableExtensions.concat(pOptions.extraExtensionsToScan);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
function fileIsScannable(pOptions, pPathToFile) {
|
|
24
|
-
|
|
24
|
+
return getScannableExtensions(pOptions).includes(getExtension(pPathToFile));
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
function shouldBeIncluded(pFullPathToFile, pOptions) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
return (
|
|
29
|
+
!pOptions?.includeOnly?.path ||
|
|
30
|
+
filenameMatchesPattern(pFullPathToFile, pOptions.includeOnly.path)
|
|
31
|
+
);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function shouldBeExcluded(pFullPathToFile, pOptions) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
return (
|
|
36
|
+
(pOptions?.exclude?.path &&
|
|
37
|
+
filenameMatchesPattern(pFullPathToFile, pOptions.exclude.path)) ||
|
|
38
|
+
(pOptions?.doNotFollow?.path &&
|
|
39
|
+
filenameMatchesPattern(pFullPathToFile, pOptions.doNotFollow.path))
|
|
40
|
+
);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -46,41 +46,41 @@ function shouldBeExcluded(pFullPathToFile, pOptions) {
|
|
|
46
46
|
* @returns {string[]}
|
|
47
47
|
*/
|
|
48
48
|
function gatherScannableFilesFromDirectory(pDirectoryName, pOptions) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
return readdirSync(join(pOptions.baseDir, pDirectoryName))
|
|
50
|
+
.map((pFileName) => join(pDirectoryName, pFileName))
|
|
51
|
+
.flatMap((pFullPathToFile) => {
|
|
52
|
+
const lPosixPath = pathToPosix(pFullPathToFile);
|
|
53
|
+
if (shouldBeExcluded(lPosixPath, pOptions)) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const lStat = statSync(join(pOptions.baseDir, pFullPathToFile), {
|
|
57
|
+
throwIfNoEntry: false,
|
|
58
|
+
});
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
60
|
+
if (lStat) {
|
|
61
|
+
if (lStat.isDirectory()) {
|
|
62
|
+
return gatherScannableFilesFromDirectory(pFullPathToFile, pOptions);
|
|
63
|
+
}
|
|
64
|
+
if (
|
|
65
|
+
fileIsScannable(pOptions, pFullPathToFile) &&
|
|
66
|
+
shouldBeIncluded(lPosixPath, pOptions)
|
|
67
|
+
) {
|
|
68
|
+
return lPosixPath;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
});
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
function expandGlob(pBaseDirectory, pScannedGlob) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
const isMatch = picomatch(pathToPosix(pScannedGlob.glob), {
|
|
77
|
+
windows: platform === "win32",
|
|
78
|
+
});
|
|
79
|
+
return readdirSync(join(pBaseDirectory, pScannedGlob.base), {
|
|
80
|
+
recursive: true,
|
|
81
|
+
})
|
|
82
|
+
.filter((pFile) => isMatch(pFile))
|
|
83
|
+
.map((pFile) => pathToPosix(join(pScannedGlob.base, pFile)));
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/**
|
|
@@ -103,27 +103,27 @@ function expandGlob(pBaseDirectory, pScannedGlob) {
|
|
|
103
103
|
* @return {string[]} paths to files to be gathered.
|
|
104
104
|
*/
|
|
105
105
|
export default function gatherInitialSources(
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
pFileDirectoryAndGlobArray,
|
|
107
|
+
pOptions,
|
|
108
108
|
) {
|
|
109
|
-
|
|
109
|
+
const lOptions = { baseDir: process.cwd(), ...pOptions };
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
111
|
+
return pFileDirectoryAndGlobArray
|
|
112
|
+
.flatMap((pFileDirectoryOrGlob) => {
|
|
113
|
+
const lScannedGlob = picomatch.scan(pFileDirectoryOrGlob, {
|
|
114
|
+
windows: platform === "win32",
|
|
115
|
+
});
|
|
116
|
+
if (lScannedGlob.isGlob) {
|
|
117
|
+
return expandGlob(lOptions.baseDir, lScannedGlob);
|
|
118
|
+
}
|
|
119
|
+
return normalize(pFileDirectoryOrGlob);
|
|
120
|
+
})
|
|
121
|
+
.flatMap((pFileOrDirectory) => {
|
|
122
|
+
if (statSync(join(lOptions.baseDir, pFileOrDirectory)).isDirectory()) {
|
|
123
|
+
return gatherScannableFilesFromDirectory(pFileOrDirectory, lOptions);
|
|
124
|
+
}
|
|
125
|
+
// Not a glob anymore, and not a directory => it's a file
|
|
126
|
+
return pathToPosix(pFileOrDirectory);
|
|
127
|
+
})
|
|
128
|
+
.sort();
|
|
129
129
|
}
|