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
|
@@ -3,28 +3,28 @@ import tryImport from "#utl/try-import.mjs";
|
|
|
3
3
|
import meta from "#meta.cjs";
|
|
4
4
|
|
|
5
5
|
const typescript = await tryImport(
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
"typescript",
|
|
7
|
+
meta.supportedTranspilers.typescript,
|
|
8
8
|
);
|
|
9
9
|
|
|
10
10
|
const FORMAT_DIAGNOSTICS_HOST = {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
getCanonicalFileName(pFileName) {
|
|
12
|
+
let lReturnValue = pFileName.toLowerCase();
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
// depends on the platform which branch is taken, hence the c8 ignore
|
|
15
|
+
/* c8 ignore start */
|
|
16
|
+
if (typescript?.sys?.useCaseSensitiveFileNames ?? false) {
|
|
17
|
+
lReturnValue = pFileName;
|
|
18
|
+
}
|
|
19
|
+
/* c8 ignore stop */
|
|
20
|
+
return lReturnValue;
|
|
21
|
+
},
|
|
22
|
+
getCurrentDirectory() {
|
|
23
|
+
return process.cwd();
|
|
24
|
+
},
|
|
25
|
+
getNewLine() {
|
|
26
|
+
return "\n";
|
|
27
|
+
},
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -39,38 +39,36 @@ const FORMAT_DIAGNOSTICS_HOST = {
|
|
|
39
39
|
* @throws {TypeError} when the tsconfig is unreadable
|
|
40
40
|
*/
|
|
41
41
|
export default function extractTSConfig(pTSConfigFileName) {
|
|
42
|
-
|
|
42
|
+
let lReturnValue = {};
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
if (typescript) {
|
|
45
|
+
const lConfig = typescript.readConfigFile(
|
|
46
|
+
pTSConfigFileName,
|
|
47
|
+
typescript.sys.readFile,
|
|
48
|
+
);
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
if (typeof lConfig.error !== "undefined") {
|
|
51
|
+
throw new TypeError(
|
|
52
|
+
typescript.formatDiagnostics([lConfig.error], FORMAT_DIAGNOSTICS_HOST),
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
lReturnValue = typescript.parseJsonConfigFileContent(
|
|
56
|
+
lConfig.config,
|
|
57
|
+
typescript.sys,
|
|
58
|
+
dirname(resolve(pTSConfigFileName)),
|
|
59
|
+
{},
|
|
60
|
+
pTSConfigFileName,
|
|
61
|
+
);
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// lRetval.options; // CompilerOptions
|
|
73
|
-
}
|
|
63
|
+
if (lReturnValue.errors.length > 0) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
typescript.formatDiagnostics(
|
|
66
|
+
lReturnValue.errors,
|
|
67
|
+
FORMAT_DIAGNOSTICS_HOST,
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
74
72
|
|
|
75
|
-
|
|
73
|
+
return lReturnValue;
|
|
76
74
|
}
|
|
@@ -6,99 +6,99 @@ import makeAbsolute from "./make-absolute.mjs";
|
|
|
6
6
|
const require = createRequire(import.meta.url);
|
|
7
7
|
|
|
8
8
|
function pryConfigFromTheConfig(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
pWebpackConfigModule,
|
|
10
|
+
pEnvironment,
|
|
11
|
+
pArguments,
|
|
12
12
|
) {
|
|
13
|
-
|
|
13
|
+
let lReturnValue = pWebpackConfigModule;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (typeof pWebpackConfigModule === "function") {
|
|
16
|
+
lReturnValue = pWebpackConfigModule(pEnvironment, pArguments);
|
|
17
|
+
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
if (Array.isArray(pWebpackConfigModule)) {
|
|
20
|
+
lReturnValue = pryConfigFromTheConfig(
|
|
21
|
+
pWebpackConfigModule[0],
|
|
22
|
+
pEnvironment,
|
|
23
|
+
pArguments,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
return lReturnValue;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function suggestModules(pSuggestionList, pWebpackConfigFilename) {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
let lReturnValue = "";
|
|
32
|
+
let lSuggestionList = pSuggestionList;
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
if (pSuggestionList && typeof pSuggestionList === "string") {
|
|
35
|
+
lSuggestionList = [pSuggestionList];
|
|
36
|
+
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
if (Array.isArray(lSuggestionList) && lSuggestionList.length > 0) {
|
|
39
|
+
lReturnValue = lSuggestionList.reduce(
|
|
40
|
+
(pAll, pCurrent) => `${pAll} - ${pCurrent.module || pCurrent}\n`,
|
|
41
|
+
`\n Some npm modules that might fix that problem (one of which you'll` +
|
|
42
|
+
`\n need so '${pWebpackConfigFilename}' works with webpack anyway):\n`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
return lReturnValue;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function tryRegisterNonNative(pWebpackConfigFilename) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
const lConfigExtension = extname(pWebpackConfigFilename);
|
|
50
|
+
const interpret = require("interpret");
|
|
51
|
+
const rechoir = require("rechoir");
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
try {
|
|
54
|
+
rechoir.prepare(interpret.extensions, pWebpackConfigFilename);
|
|
55
|
+
} catch (pError) {
|
|
56
|
+
throw new Error(
|
|
57
|
+
`${pError.message}` +
|
|
58
|
+
`\n${suggestModules(
|
|
59
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
60
|
+
interpret.extensions[lConfigExtension],
|
|
61
|
+
pWebpackConfigFilename,
|
|
62
|
+
)}`,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
function isNativelySupported(pWebpackConfigFilename) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
68
|
+
const lNativelySupportedExtensions = [
|
|
69
|
+
".js",
|
|
70
|
+
".cjs",
|
|
71
|
+
".mjs",
|
|
72
|
+
".json",
|
|
73
|
+
".node",
|
|
74
|
+
];
|
|
75
|
+
const lWebpackConfigExtension = extname(pWebpackConfigFilename);
|
|
76
|
+
return lNativelySupportedExtensions.includes(lWebpackConfigExtension);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
async function attemptImport(pAbsoluteWebpackConfigFileName) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
80
|
+
try {
|
|
81
|
+
if (isNativelySupported(pAbsoluteWebpackConfigFileName)) {
|
|
82
|
+
const { default: lModule } = await import(
|
|
83
|
+
`file://${pAbsoluteWebpackConfigFileName}`
|
|
84
|
+
);
|
|
85
|
+
return lModule;
|
|
86
|
+
} else {
|
|
87
|
+
tryRegisterNonNative(pAbsoluteWebpackConfigFileName);
|
|
88
|
+
/* we're using still using require instead of dynamic imports here because
|
|
89
|
+
* the modules webpack uses for non-native formats monkey-patch on the commonjs
|
|
90
|
+
* module system. If we'd use a dynamic import, these monkey-patches wouldn't
|
|
91
|
+
* be used.
|
|
92
|
+
*/
|
|
93
|
+
/* eslint n/global-require:0, security/detect-non-literal-require:0, import/no-dynamic-require:0 */
|
|
94
|
+
return require(pAbsoluteWebpackConfigFileName);
|
|
95
|
+
}
|
|
96
|
+
} catch (pError) {
|
|
97
|
+
throw new Error(
|
|
98
|
+
`The webpack config '${pAbsoluteWebpackConfigFileName}' seems to be not quite valid for use:` +
|
|
99
|
+
`\n\n "${pError}"\n`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
/**
|
|
@@ -117,21 +117,21 @@ async function attemptImport(pAbsoluteWebpackConfigFileName) {
|
|
|
117
117
|
* doesn't exist, or because it's invalid)
|
|
118
118
|
*/
|
|
119
119
|
export default async function extractWebpackResolveConfig(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
pWebpackConfigFilename,
|
|
121
|
+
pEnvironment,
|
|
122
|
+
pArguments,
|
|
123
123
|
) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
let lReturnValue = {};
|
|
125
|
+
const lAbsoluteConfigFilename = makeAbsolute(pWebpackConfigFilename);
|
|
126
|
+
const lWebpackConfig = pryConfigFromTheConfig(
|
|
127
|
+
await attemptImport(lAbsoluteConfigFilename),
|
|
128
|
+
pEnvironment,
|
|
129
|
+
pArguments,
|
|
130
|
+
);
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
if (lWebpackConfig.resolve) {
|
|
133
|
+
lReturnValue = lWebpackConfig.resolve;
|
|
134
|
+
}
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
return lReturnValue;
|
|
137
137
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { join, isAbsolute } from "node:path";
|
|
2
2
|
|
|
3
3
|
export default function makeAbsolute(pFilename) {
|
|
4
|
-
|
|
4
|
+
let lReturnValue = pFilename;
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
if (!isAbsolute(pFilename)) {
|
|
7
|
+
lReturnValue = join(process.cwd(), pFilename);
|
|
8
|
+
}
|
|
9
|
+
return lReturnValue;
|
|
10
10
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { validateDependency, validateModule } from "#validate/index.mjs";
|
|
2
2
|
|
|
3
3
|
function addDependencyViolations(pModule, pDependency, pRuleSet, pValidate) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
return {
|
|
5
|
+
...pDependency,
|
|
6
|
+
...(pValidate
|
|
7
|
+
? validateDependency(pRuleSet, pModule, pDependency)
|
|
8
|
+
: { valid: true }),
|
|
9
|
+
};
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -22,11 +22,11 @@ function addDependencyViolations(pModule, pDependency, pRuleSet, pValidate) {
|
|
|
22
22
|
* valid and if not which rules were violated
|
|
23
23
|
*/
|
|
24
24
|
export default function addValidations(pModules, pRuleSet, pValidate) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
return pModules.map((pModule) => ({
|
|
26
|
+
...pModule,
|
|
27
|
+
...(pValidate ? validateModule(pRuleSet, pModule) : { valid: true }),
|
|
28
|
+
dependencies: pModule.dependencies.map((pDependency) =>
|
|
29
|
+
addDependencyViolations(pModule, pDependency, pRuleSet, pValidate),
|
|
30
|
+
),
|
|
31
|
+
}));
|
|
32
32
|
}
|
|
@@ -3,44 +3,44 @@
|
|
|
3
3
|
/** @import { IFlattenedRuleSet } from "../../../types/rule-set.mjs" */
|
|
4
4
|
|
|
5
5
|
function isCycleRule(pRule) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
return (
|
|
7
|
+
/* c8 ignore start */
|
|
8
|
+
Object.hasOwn(pRule?.to ?? {}, "circular")
|
|
9
|
+
/* c8 ignore stop */
|
|
10
|
+
);
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* @param {IFlattenedRuleSet} pRuleSet
|
|
14
14
|
* @returns {boolean}
|
|
15
15
|
*/
|
|
16
16
|
export function hasCycleRule(pRuleSet) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
return (
|
|
18
|
+
(pRuleSet?.forbidden ?? []).some(isCycleRule) ||
|
|
19
|
+
(pRuleSet?.allowed ?? []).some(isCycleRule)
|
|
20
|
+
);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
function addCircularityCheckToDependency(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
pIndexedGraph,
|
|
25
|
+
pFrom,
|
|
26
|
+
pToDep,
|
|
27
|
+
pDependencyName,
|
|
28
28
|
) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
let lReturnValue = {
|
|
30
|
+
...pToDep,
|
|
31
|
+
circular: false,
|
|
32
|
+
};
|
|
33
|
+
const lCycle = pIndexedGraph.getCycle(pFrom, pToDep[pDependencyName]);
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
if (lCycle.length > 0) {
|
|
36
|
+
lReturnValue = {
|
|
37
|
+
...lReturnValue,
|
|
38
|
+
circular: true,
|
|
39
|
+
cycle: lCycle,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
return lReturnValue;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
@@ -49,28 +49,28 @@ function addCircularityCheckToDependency(
|
|
|
49
49
|
* dependencies with that added.
|
|
50
50
|
*/
|
|
51
51
|
export default function detectAndAddCycles(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
pNodes,
|
|
53
|
+
pIndexedNodes,
|
|
54
|
+
{ pSourceAttribute, pDependencyName, pSkipAnalysisNotInRules, pRuleSet },
|
|
55
55
|
) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
56
|
+
if (!pSkipAnalysisNotInRules || hasCycleRule(pRuleSet)) {
|
|
57
|
+
return pNodes.map((pModule) => ({
|
|
58
|
+
...pModule,
|
|
59
|
+
dependencies: pModule.dependencies.map((pToDep) =>
|
|
60
|
+
addCircularityCheckToDependency(
|
|
61
|
+
pIndexedNodes,
|
|
62
|
+
pModule[pSourceAttribute],
|
|
63
|
+
pToDep,
|
|
64
|
+
pDependencyName,
|
|
65
|
+
),
|
|
66
|
+
),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
return pNodes.map((pModule) => ({
|
|
70
|
+
...pModule,
|
|
71
|
+
dependencies: pModule.dependencies.map((pToDep) => ({
|
|
72
|
+
...pToDep,
|
|
73
|
+
circular: false,
|
|
74
|
+
})),
|
|
75
|
+
}));
|
|
76
76
|
}
|
|
@@ -3,24 +3,24 @@ import { isDependent } from "./module-utl.mjs";
|
|
|
3
3
|
/** @import { IFlattenedRuleSet } from "../../../types/rule-set.mjs" */
|
|
4
4
|
|
|
5
5
|
function isDependentsRule(pRule) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
// used in folder rules and when moreUnstable is in the 'to' => governed by
|
|
7
|
+
// the 'metrics' flag in options, sot not going to repeat that here
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
// dependents are used in the orphans analsys. However, there is a fall back
|
|
10
|
+
// where it does its own analysis, so not going to repeat that check here.
|
|
11
|
+
return (
|
|
12
|
+
/* c8 ignore start */
|
|
13
|
+
Object.hasOwn(pRule?.module ?? {}, "numberOfDependentsLessThan") ||
|
|
14
|
+
Object.hasOwn(pRule?.module ?? {}, "numberOfDependentsMoreThan")
|
|
15
|
+
/* c8 ignore stop */
|
|
16
|
+
);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function getDependents(pModule, pModules) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
// perf between O(n) in an unconnected graph and O(n^2) in a fully connected one
|
|
21
|
+
return pModules
|
|
22
|
+
.filter(isDependent(pModule.source))
|
|
23
|
+
.map((pDependentModule) => pDependentModule.source);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/**
|
|
@@ -28,21 +28,21 @@ export function getDependents(pModule, pModules) {
|
|
|
28
28
|
* @returns {boolean}
|
|
29
29
|
*/
|
|
30
30
|
export function hasDependentsRule(pRuleSet) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
return (
|
|
32
|
+
(pRuleSet?.forbidden ?? []).some(isDependentsRule) ||
|
|
33
|
+
(pRuleSet?.allowed ?? []).some(isDependentsRule)
|
|
34
|
+
);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export default function addDependents(
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
pModules,
|
|
39
|
+
{ skipAnalysisNotInRules, metrics, ruleSet },
|
|
40
40
|
) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
if (!skipAnalysisNotInRules || metrics || hasDependentsRule(ruleSet)) {
|
|
42
|
+
return pModules.map((pModule) => ({
|
|
43
|
+
...pModule,
|
|
44
|
+
dependents: getDependents(pModule, pModules),
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
return pModules;
|
|
48
48
|
}
|