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,11 +1,11 @@
|
|
|
1
1
|
export function filenameMatchesPattern(pFullPathToFile, pPattern) {
|
|
2
|
-
|
|
2
|
+
return RegExp(pPattern, "g").test(pFullPathToFile);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
export function moduleMatchesFilter(pModule, pFilter) {
|
|
6
|
-
|
|
6
|
+
return filenameMatchesPattern(pModule.source, pFilter.path);
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export function dependencyMatchesFilter(pDependency, pFilter) {
|
|
10
|
-
|
|
10
|
+
return filenameMatchesPattern(pDependency.resolved, pFilter.path);
|
|
11
11
|
}
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
* @return {IForbiddenRuleType|undefined} - a rule (or 'undefined' if nothing found)
|
|
15
15
|
*/
|
|
16
16
|
export function findRuleByName(pRuleSet, pName) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const lNamedRules = (pRuleSet?.forbidden ?? []).concat(
|
|
18
|
+
pRuleSet?.required ?? [],
|
|
19
|
+
);
|
|
20
|
+
return lNamedRules.find((pRule) => pRule.name === pName);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
function ruleHasALicenseLikeAttribute(pRule) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
return (
|
|
25
|
+
Object.hasOwn(pRule?.to ?? {}, "license") ||
|
|
26
|
+
Object.hasOwn(pRule?.to ?? {}, "licenseNot")
|
|
27
|
+
);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -37,10 +37,10 @@ function ruleHasALicenseLikeAttribute(pRule) {
|
|
|
37
37
|
* @return {boolean}
|
|
38
38
|
*/
|
|
39
39
|
export function ruleSetHasLicenseRule(pRuleSet) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
return (
|
|
41
|
+
(pRuleSet?.forbidden ?? []).some(ruleHasALicenseLikeAttribute) ||
|
|
42
|
+
(pRuleSet?.allowed ?? []).some(ruleHasALicenseLikeAttribute)
|
|
43
|
+
);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
@@ -48,12 +48,12 @@ export function ruleSetHasLicenseRule(pRuleSet) {
|
|
|
48
48
|
* @return {boolean}
|
|
49
49
|
*/
|
|
50
50
|
export function ruleSetHasDeprecationRule(pRuleSet) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
return (
|
|
52
|
+
(pRuleSet?.forbidden ?? []).some((pRule) =>
|
|
53
|
+
(pRule?.to?.dependencyTypes ?? []).includes("deprecated"),
|
|
54
|
+
) ||
|
|
55
|
+
(pRuleSet?.allowed ?? []).some((pRule) =>
|
|
56
|
+
(pRule?.to?.dependencyTypes ?? []).includes("deprecated"),
|
|
57
|
+
)
|
|
58
|
+
);
|
|
59
59
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export default function stripSelfTransitions(pModule) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
return {
|
|
3
|
+
...pModule,
|
|
4
|
+
dependencies: pModule.dependencies.filter(
|
|
5
|
+
(pDependency) => pModule.source !== pDependency.resolved,
|
|
6
|
+
),
|
|
7
|
+
};
|
|
8
8
|
}
|
package/src/main/cruise.mjs
CHANGED
|
@@ -7,102 +7,102 @@ import { bus } from "#utl/bus.mjs";
|
|
|
7
7
|
const TOTAL_STEPS = 10;
|
|
8
8
|
|
|
9
9
|
export function c(pComplete, pTotal = TOTAL_STEPS) {
|
|
10
|
-
|
|
10
|
+
return { complete: pComplete / pTotal };
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/** @type {import("../../types/dependency-cruiser.js").cruise} */
|
|
14
14
|
// eslint-disable-next-line max-lines-per-function, max-statements
|
|
15
15
|
export default async function cruise(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
pFileAndDirectoryArray,
|
|
17
|
+
pCruiseOptions,
|
|
18
|
+
pResolveOptions,
|
|
19
|
+
pTranspileOptions,
|
|
20
20
|
) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
bus.summary("parse options", c(1));
|
|
22
|
+
const lCruiseOptionsValid = assertCruiseOptionsValid(pCruiseOptions);
|
|
23
|
+
/** @type {import("../../types/strict-options.js").IStrictCruiseOptions} */
|
|
24
|
+
let lCruiseOptions = normalizeCruiseOptions(
|
|
25
|
+
lCruiseOptionsValid,
|
|
26
|
+
pFileAndDirectoryArray,
|
|
27
|
+
);
|
|
28
|
+
let lCache = null;
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
if (lCruiseOptions.cache) {
|
|
31
|
+
bus.summary(
|
|
32
|
+
`cache: check freshness with ${lCruiseOptions.cache.strategy}`,
|
|
33
|
+
c(2),
|
|
34
|
+
);
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
const { default: Cache } = await import("#cache/cache.mjs");
|
|
37
|
+
lCache = new Cache(
|
|
38
|
+
lCruiseOptions.cache.strategy,
|
|
39
|
+
lCruiseOptions.cache.compress,
|
|
40
|
+
);
|
|
41
|
+
const lCachedResults = await lCache.read(lCruiseOptions.cache.folder);
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
if (await lCache.canServeFromCache(lCruiseOptions, lCachedResults)) {
|
|
44
|
+
bus.summary("cache: report from cache", c(8));
|
|
45
|
+
return await reportWrap(lCachedResults, lCruiseOptions);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
49
|
+
bus.summary("import analytical modules", c(3));
|
|
50
|
+
const [
|
|
51
|
+
{ default: normalizeRuleSet },
|
|
52
|
+
{ default: assertRuleSetValid },
|
|
53
|
+
{ default: normalizeFilesAndDirectories },
|
|
54
|
+
{ default: normalizeResolveOptions },
|
|
55
|
+
{ default: extract },
|
|
56
|
+
{ default: enrich },
|
|
57
|
+
] = await Promise.all([
|
|
58
|
+
// despite rule set parsing being behind an if, it's the 'normal' use case
|
|
59
|
+
// for dependency-cruiser, so import it unconditionally nonetheless
|
|
60
|
+
import("./rule-set/normalize.mjs"),
|
|
61
|
+
import("./rule-set/assert-validity.mjs"),
|
|
62
|
+
import("./files-and-dirs/normalize.mjs"),
|
|
63
|
+
import("./resolve-options/normalize.mjs"),
|
|
64
|
+
import("#extract/index.mjs"),
|
|
65
|
+
import("#enrich/index.mjs"),
|
|
66
|
+
]);
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
if (lCruiseOptions.ruleSet) {
|
|
69
|
+
bus.summary("parse rule set", c(4));
|
|
70
|
+
lCruiseOptions.ruleSet = normalizeRuleSet(
|
|
71
|
+
assertRuleSetValid(lCruiseOptions.ruleSet),
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
const lNormalizedFileAndDirectoryArray = normalizeFilesAndDirectories(
|
|
76
|
+
pFileAndDirectoryArray,
|
|
77
|
+
);
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
79
|
+
bus.summary("determine how to resolve", c(5));
|
|
80
|
+
const lNormalizedResolveOptions = await normalizeResolveOptions(
|
|
81
|
+
pResolveOptions,
|
|
82
|
+
lCruiseOptions,
|
|
83
|
+
pTranspileOptions?.tsConfig,
|
|
84
|
+
);
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
bus.summary("read files", c(6));
|
|
87
|
+
const lExtractionResult = extract(
|
|
88
|
+
lNormalizedFileAndDirectoryArray,
|
|
89
|
+
lCruiseOptions,
|
|
90
|
+
lNormalizedResolveOptions,
|
|
91
|
+
pTranspileOptions,
|
|
92
|
+
);
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
bus.summary("analyze", c(7));
|
|
95
|
+
const lCruiseResult = enrich(
|
|
96
|
+
lExtractionResult,
|
|
97
|
+
lCruiseOptions,
|
|
98
|
+
lNormalizedFileAndDirectoryArray,
|
|
99
|
+
);
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
if (lCruiseOptions.cache) {
|
|
102
|
+
bus.summary("cache: save", c(8));
|
|
103
|
+
await lCache.write(lCruiseOptions.cache.folder, lCruiseResult);
|
|
104
|
+
}
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
bus.summary("report", c(9));
|
|
107
|
+
return await reportWrap(lCruiseResult, lCruiseOptions);
|
|
108
108
|
}
|
|
@@ -5,12 +5,12 @@ import { isAbsolute, normalize, relative } from "node:path";
|
|
|
5
5
|
* @returns {string}
|
|
6
6
|
*/
|
|
7
7
|
function relativize(pFileDirectory) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
// if pFileDirectory === process.cwd() path.relative will yield an empty string
|
|
9
|
+
// whereas we actually want something non-empty => hence normalize
|
|
10
|
+
// the thing
|
|
11
|
+
return isAbsolute(pFileDirectory)
|
|
12
|
+
? normalize(relative(process.cwd(), pFileDirectory))
|
|
13
|
+
: pFileDirectory;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -18,5 +18,5 @@ function relativize(pFileDirectory) {
|
|
|
18
18
|
* @returns {string[]}
|
|
19
19
|
*/
|
|
20
20
|
export default function normalizeFileAndDirectoryArray(pFileAndDirectoryArray) {
|
|
21
|
-
|
|
21
|
+
return pFileAndDirectoryArray.map(relativize);
|
|
22
22
|
}
|
package/src/main/format.mjs
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import Ajv from "ajv";
|
|
2
|
-
|
|
3
1
|
import { assertFormatOptionsValid } from "./options/assert-validity.mjs";
|
|
4
2
|
import { normalizeFormatOptions } from "./options/normalize.mjs";
|
|
5
3
|
import reportWrap from "./report-wrap.mjs";
|
|
6
|
-
import
|
|
4
|
+
import validateCruiseResultSchema from "#schema/cruise-result.validate.mjs";
|
|
5
|
+
import { validateErrorsToString } from "#schema/utl.mjs";
|
|
7
6
|
|
|
8
7
|
function validateResultAgainstSchema(pResult) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
15
|
-
}
|
|
8
|
+
if (!validateCruiseResultSchema(pResult)) {
|
|
9
|
+
throw new Error(
|
|
10
|
+
`The supplied dependency-cruiser result is not valid: ${validateErrorsToString(validateCruiseResultSchema.errors)}.\n`,
|
|
11
|
+
);
|
|
12
|
+
}
|
|
16
13
|
}
|
|
17
14
|
/** @type {import("../../types/dependency-cruiser.js").format} */
|
|
18
15
|
export default async function format(pResult, pFormatOptions = {}) {
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
const lFormatOptions = normalizeFormatOptions(pFormatOptions);
|
|
17
|
+
assertFormatOptionsValid(lFormatOptions);
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
validateResultAgainstSchema(pResult);
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
return await reportWrap(pResult, lFormatOptions);
|
|
25
22
|
}
|
package/src/main/helpers.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { has, get, set } from "#utl/object-util.mjs";
|
|
2
2
|
|
|
3
3
|
const RE_PROPERTIES = [
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
"path",
|
|
5
|
+
"pathNot",
|
|
6
|
+
"license",
|
|
7
|
+
"licenseNot",
|
|
8
|
+
"exoticRequire",
|
|
9
|
+
"exoticRequireNot",
|
|
10
10
|
];
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -15,29 +15,29 @@ const RE_PROPERTIES = [
|
|
|
15
15
|
* @returns {string}
|
|
16
16
|
*/
|
|
17
17
|
export function normalizeToREAsString(pStringish) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
if (Array.isArray(pStringish)) {
|
|
19
|
+
return pStringish.join("|");
|
|
20
|
+
}
|
|
21
|
+
return pStringish;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export function normalizeREProperties(
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
pPropertyContainer,
|
|
26
|
+
pREProperties = RE_PROPERTIES,
|
|
27
27
|
) {
|
|
28
|
-
|
|
28
|
+
let lPropertyContainer = structuredClone(pPropertyContainer);
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
for (const lProperty of pREProperties) {
|
|
31
|
+
// lProperty can be nested properties, so we use _.has and _.get
|
|
32
|
+
// instead of elvis operators
|
|
33
|
+
if (has(lPropertyContainer, lProperty)) {
|
|
34
|
+
set(
|
|
35
|
+
lPropertyContainer,
|
|
36
|
+
lProperty,
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
normalizeToREAsString(get(lPropertyContainer, lProperty)),
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return lPropertyContainer;
|
|
43
43
|
}
|
package/src/main/index.mjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import format from "./format.mjs";
|
|
2
2
|
import cruise from "./cruise.mjs";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
allExtensions,
|
|
5
|
+
getAvailableTranspilers,
|
|
6
6
|
} from "#extract/transpile/meta.mjs";
|
|
7
7
|
|
|
8
8
|
export {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
allExtensions,
|
|
10
|
+
getAvailableTranspilers,
|
|
11
11
|
} from "#extract/transpile/meta.mjs";
|
|
12
12
|
export { default as cruise } from "./cruise.mjs";
|
|
13
13
|
export { default as format } from "./format.mjs";
|
|
14
14
|
|
|
15
15
|
export default {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
cruise,
|
|
17
|
+
format,
|
|
18
|
+
allExtensions,
|
|
19
|
+
getAvailableTranspilers,
|
|
20
20
|
};
|