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,193 +1,193 @@
|
|
|
1
1
|
import { accessSync, constants } from "node:fs";
|
|
2
2
|
import { isAbsolute } from "node:path";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
RULES_FILE_NAME_SEARCH_ARRAY,
|
|
5
|
+
DEFAULT_BASELINE_FILE_NAME,
|
|
6
|
+
OUTPUT_TO,
|
|
7
|
+
OUTPUT_TYPE,
|
|
8
|
+
WEBPACK_CONFIG,
|
|
9
|
+
TYPESCRIPT_CONFIG,
|
|
10
|
+
BABEL_CONFIG,
|
|
11
|
+
OLD_DEFAULT_RULES_FILE_NAME,
|
|
12
12
|
} from "./defaults.mjs";
|
|
13
13
|
import { set } from "#utl/object-util.mjs";
|
|
14
14
|
import loadConfig from "#config-utl/extract-depcruise-config/index.mjs";
|
|
15
15
|
|
|
16
16
|
function getOptionValue(pDefault) {
|
|
17
|
-
|
|
17
|
+
return (pValue) => (typeof pValue === "string" ? pValue : pDefault);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// eslint-disable-next-line complexity
|
|
21
21
|
function normalizeConfigFileName(pCliOptions, pConfigWrapperName, pDefault) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
22
|
+
let lOptions = structuredClone(pCliOptions);
|
|
23
|
+
|
|
24
|
+
if (Object.hasOwn(lOptions, pConfigWrapperName)) {
|
|
25
|
+
set(
|
|
26
|
+
lOptions,
|
|
27
|
+
`ruleSet.options.${pConfigWrapperName}.fileName`,
|
|
28
|
+
getOptionValue(pDefault)(lOptions[pConfigWrapperName]),
|
|
29
|
+
/* eslint security/detect-object-injection: 0 */
|
|
30
|
+
);
|
|
31
|
+
Reflect.deleteProperty(lOptions, pConfigWrapperName);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (
|
|
35
|
+
(lOptions?.ruleSet?.options?.[pConfigWrapperName] ?? null) &&
|
|
36
|
+
!(lOptions?.ruleSet?.options?.[pConfigWrapperName]?.fileName ?? null)
|
|
37
|
+
) {
|
|
38
|
+
set(lOptions, `ruleSet.options.${pConfigWrapperName}.fileName`, pDefault);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return lOptions;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function fileExists(pFileName) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
try {
|
|
46
|
+
accessSync(pFileName, constants.R_OK);
|
|
47
|
+
return true;
|
|
48
|
+
} catch (pError) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function validateAndGetCustomRulesFileName(pValidate) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
let lReturnValue = "";
|
|
55
|
+
|
|
56
|
+
if (fileExists(pValidate)) {
|
|
57
|
+
lReturnValue = pValidate;
|
|
58
|
+
} else {
|
|
59
|
+
throw new Error(
|
|
60
|
+
`Can't open config file '${pValidate}' for reading. Does it exist?\n` +
|
|
61
|
+
` - You can create a config file by running 'npx dependency-cruiser --init'\n` +
|
|
62
|
+
` - If you intended to run without a config file use --no-config\n`,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return lReturnValue;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
function validateAndGetDefaultRulesFileName() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
69
|
+
let lReturnValue = RULES_FILE_NAME_SEARCH_ARRAY.find(fileExists);
|
|
70
|
+
|
|
71
|
+
if (typeof lReturnValue === "undefined") {
|
|
72
|
+
throw new TypeError(
|
|
73
|
+
`Can't open a config file (.dependency-cruiser.(c)js) at the default location. Does it exist?\n` +
|
|
74
|
+
` - You can create one by running 'npx dependency-cruiser --init'\n` +
|
|
75
|
+
` - Want to run a without a config file? Use --no-config\n`,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
return lReturnValue;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
function validateAndNormalizeRulesFileName(pValidate) {
|
|
82
|
-
|
|
82
|
+
let lReturnValue = "";
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
if (typeof pValidate === "string") {
|
|
85
|
+
lReturnValue = validateAndGetCustomRulesFileName(pValidate);
|
|
86
|
+
} else {
|
|
87
|
+
lReturnValue = validateAndGetDefaultRulesFileName();
|
|
88
|
+
}
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
return lReturnValue;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
function validateAndGetKnownViolationsFileName(pKnownViolations) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
94
|
+
const lKnownViolationsFileName =
|
|
95
|
+
typeof pKnownViolations === "string"
|
|
96
|
+
? pKnownViolations
|
|
97
|
+
: DEFAULT_BASELINE_FILE_NAME;
|
|
98
|
+
|
|
99
|
+
if (fileExists(lKnownViolationsFileName)) {
|
|
100
|
+
return lKnownViolationsFileName;
|
|
101
|
+
} else {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Can't open '${lKnownViolationsFileName}' for reading. Does it exist?\n` +
|
|
104
|
+
` (You can create a .dependency-cruiser-known-violations.json with --output-type baseline)\n`,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
function normalizeKnownViolationsOption(pCliOptions) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
110
|
+
if (
|
|
111
|
+
!Object.hasOwn(pCliOptions, "ignoreKnown") ||
|
|
112
|
+
pCliOptions.ignoreKnown === false
|
|
113
|
+
) {
|
|
114
|
+
return {};
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
knownViolationsFile: validateAndGetKnownViolationsFileName(
|
|
118
|
+
pCliOptions.ignoreKnown,
|
|
119
|
+
),
|
|
120
|
+
};
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
async function normalizeValidationOption(pCliOptions) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
124
|
+
if (!pCliOptions.validate) {
|
|
125
|
+
return {
|
|
126
|
+
validate: false,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const rulesFile = validateAndNormalizeRulesFileName(pCliOptions.validate);
|
|
130
|
+
return {
|
|
131
|
+
rulesFile,
|
|
132
|
+
ruleSet: await loadConfig(
|
|
133
|
+
isAbsolute(rulesFile) ? rulesFile : `./${rulesFile}`,
|
|
134
|
+
),
|
|
135
|
+
validate: true,
|
|
136
|
+
};
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
function normalizeProgress(pCliOptions) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
140
|
+
if (!Object.hasOwn(pCliOptions, "progress")) {
|
|
141
|
+
return {};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
let lProgress = pCliOptions.progress;
|
|
145
|
+
if (lProgress === true) {
|
|
146
|
+
lProgress = "cli-feedback";
|
|
147
|
+
}
|
|
148
|
+
return { progress: lProgress };
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
function normalizeCacheStrategy(pCliOptions) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
152
|
+
if (!Object.hasOwn(pCliOptions, "cacheStrategy")) {
|
|
153
|
+
return {};
|
|
154
|
+
}
|
|
155
|
+
const lStrategy =
|
|
156
|
+
pCliOptions.cacheStrategy === "content" ? "content" : "metadata";
|
|
157
|
+
|
|
158
|
+
let lReturnValue = {};
|
|
159
|
+
|
|
160
|
+
if (pCliOptions.cache && typeof pCliOptions.cache === "object") {
|
|
161
|
+
lReturnValue.cache = structuredClone(pCliOptions.cache);
|
|
162
|
+
lReturnValue.cache.strategy = lStrategy;
|
|
163
|
+
} else {
|
|
164
|
+
lReturnValue = {
|
|
165
|
+
cache: {
|
|
166
|
+
strategy: lStrategy,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return lReturnValue;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
function normalizeCache(pCliOptions) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
174
|
+
if (!Object.hasOwn(pCliOptions, "cache")) {
|
|
175
|
+
return {};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (pCliOptions.cache === true) {
|
|
179
|
+
return { cache: {} };
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (typeof pCliOptions.cache === "string") {
|
|
183
|
+
return {
|
|
184
|
+
cache: {
|
|
185
|
+
folder: pCliOptions.cache,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return { cache: false };
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
/**
|
|
@@ -199,43 +199,43 @@ function normalizeCache(pCliOptions) {
|
|
|
199
199
|
* @return {object} [description]
|
|
200
200
|
*/
|
|
201
201
|
export default async function normalizeOptions(pOptionsAsPassedFromCommander) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
202
|
+
let lOptions = {
|
|
203
|
+
outputTo: OUTPUT_TO,
|
|
204
|
+
outputType: OUTPUT_TYPE,
|
|
205
|
+
...pOptionsAsPassedFromCommander,
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
if (Object.hasOwn(lOptions, "moduleSystems")) {
|
|
209
|
+
lOptions.moduleSystems = lOptions.moduleSystems
|
|
210
|
+
.split(",")
|
|
211
|
+
.map((pString) => pString.trim());
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (Object.hasOwn(lOptions, "config")) {
|
|
215
|
+
lOptions.validate = lOptions.config;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
lOptions = { ...lOptions, ...(await normalizeValidationOption(lOptions)) };
|
|
219
|
+
lOptions = { ...lOptions, ...normalizeProgress(lOptions) };
|
|
220
|
+
lOptions = { ...lOptions, ...normalizeCache(lOptions) };
|
|
221
|
+
lOptions = { ...lOptions, ...normalizeCacheStrategy(lOptions) };
|
|
222
|
+
lOptions = { ...lOptions, ...normalizeKnownViolationsOption(lOptions) };
|
|
223
|
+
lOptions = normalizeConfigFileName(lOptions, "webpackConfig", WEBPACK_CONFIG);
|
|
224
|
+
lOptions = normalizeConfigFileName(lOptions, "tsConfig", TYPESCRIPT_CONFIG);
|
|
225
|
+
lOptions = normalizeConfigFileName(lOptions, "babelConfig", BABEL_CONFIG);
|
|
226
|
+
if (Object.hasOwn(lOptions, "affected") && lOptions.affected !== false) {
|
|
227
|
+
const { list } = await import("watskeburt");
|
|
228
|
+
lOptions.reaches = await list({
|
|
229
|
+
oldRevision: lOptions.affected === true ? "main" : lOptions.affected,
|
|
230
|
+
outputType: "regex",
|
|
231
|
+
extensions:
|
|
232
|
+
"cjs,cjsx,coffee,csx,cts,js,json,jsx,litcoffee,ls,mjs,mts,svelte,ts,tsx,vue,vuex",
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return lOptions;
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
export const determineRulesFileName = getOptionValue(
|
|
240
|
-
|
|
240
|
+
OLD_DEFAULT_RULES_FILE_NAME,
|
|
241
241
|
);
|
|
@@ -3,16 +3,16 @@ import { fileURLToPath } from "node:url";
|
|
|
3
3
|
import { getHeader, getFooter } from "#report/dot-webpage/wrap-in-html.mjs";
|
|
4
4
|
|
|
5
5
|
const STYLESHEET_FILE = fileURLToPath(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
new URL(
|
|
7
|
+
"../../report/dot-webpage/svg-in-html-snippets/style.css",
|
|
8
|
+
import.meta.url,
|
|
9
|
+
),
|
|
10
10
|
);
|
|
11
11
|
const SCRIPT_FILE = fileURLToPath(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
new URL(
|
|
13
|
+
"../../report/dot-webpage/svg-in-html-snippets/script.cjs",
|
|
14
|
+
import.meta.url,
|
|
15
|
+
),
|
|
16
16
|
);
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -30,34 +30,34 @@ const SCRIPT_FILE = fileURLToPath(
|
|
|
30
30
|
* @param {writeStream} pOutStream stream to write to
|
|
31
31
|
*/
|
|
32
32
|
export default async function wrap(pInStream, pOutStream) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const [lStylesheet, lScript] = await Promise.all([
|
|
34
|
+
readFile(STYLESHEET_FILE, "utf8"),
|
|
35
|
+
readFile(SCRIPT_FILE, "utf8"),
|
|
36
|
+
]);
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
38
|
+
pOutStream.write(getHeader(lStylesheet));
|
|
39
|
+
pInStream
|
|
40
|
+
.on("end", () => {
|
|
41
|
+
pOutStream.write(getFooter(lScript));
|
|
42
|
+
pOutStream.end();
|
|
43
|
+
})
|
|
44
|
+
.on(
|
|
45
|
+
"error",
|
|
46
|
+
/* c8 ignore start */
|
|
47
|
+
(pError) => {
|
|
48
|
+
process.stderr.write(`${pError}\n`);
|
|
49
|
+
},
|
|
50
|
+
/* c8 ignore stop */
|
|
51
|
+
)
|
|
52
|
+
/*
|
|
53
|
+
* We could have put the whole html in a template literal, but we don't know
|
|
54
|
+
* how large the svg that's going to be injected is going to be - it could just
|
|
55
|
+
* as well be as large that if we're going to buffer it, it's going into out
|
|
56
|
+
* of memory territory.
|
|
57
|
+
*
|
|
58
|
+
* We circumvent that by streaming the svg in between the header and the footer.
|
|
59
|
+
*/
|
|
60
|
+
.on("data", (pChunk) => {
|
|
61
|
+
pOutStream.write(pChunk);
|
|
62
|
+
});
|
|
63
63
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { accessSync, constants } from "node:fs";
|
|
2
2
|
|
|
3
3
|
export default function assertFileExistence(pDirectoryOrFile) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
try {
|
|
5
|
+
accessSync(pDirectoryOrFile, constants.R_OK);
|
|
6
|
+
} catch (pError) {
|
|
7
|
+
throw new Error(
|
|
8
|
+
`Can't open '${pDirectoryOrFile}' for reading. Does it exist?\n`,
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
11
|
}
|
package/src/cli/utl/io.mjs
CHANGED
|
@@ -3,14 +3,14 @@ import { writeFileSync, createReadStream } from "node:fs";
|
|
|
3
3
|
const PIPE_BUFFER_SIZE = 512;
|
|
4
4
|
|
|
5
5
|
function writeToFile(pOutputTo, pDependencyString) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
try {
|
|
7
|
+
writeFileSync(pOutputTo, pDependencyString, {
|
|
8
|
+
encoding: "utf8",
|
|
9
|
+
flag: "w",
|
|
10
|
+
});
|
|
11
|
+
} catch (pError) {
|
|
12
|
+
throw new Error(`Writing to '${pOutputTo}' didn't work. ${pError}`);
|
|
13
|
+
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -27,33 +27,30 @@ function writeToFile(pOutputTo, pDependencyString) {
|
|
|
27
27
|
* @returns {void} nothing
|
|
28
28
|
*/
|
|
29
29
|
function writeToStdOut(pString, pBufferSize = PIPE_BUFFER_SIZE) {
|
|
30
|
-
|
|
30
|
+
const lNumberOfChunks = Math.ceil(pString.length / pBufferSize);
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
/* eslint no-plusplus: 0 */
|
|
33
|
+
for (let lIndex = 0; lIndex < lNumberOfChunks; lIndex++) {
|
|
34
|
+
const lChunkStart = lIndex * pBufferSize;
|
|
35
|
+
process.stdout.write(
|
|
36
|
+
pString.substring(lChunkStart, lChunkStart + pBufferSize),
|
|
37
|
+
"utf8",
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
40
|
}
|
|
41
41
|
export function write(pOutputTo, pContent) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
} else {
|
|
50
|
-
writeToFile(pOutputTo, pContent);
|
|
51
|
-
}
|
|
42
|
+
// Reporters are responsible for ensuring output ends with a newline so the
|
|
43
|
+
// write function intentionally does not append an EOL
|
|
44
|
+
if ("-" === pOutputTo) {
|
|
45
|
+
writeToStdOut(pContent);
|
|
46
|
+
} else {
|
|
47
|
+
writeToFile(pOutputTo, pContent);
|
|
48
|
+
}
|
|
52
49
|
}
|
|
53
50
|
|
|
54
51
|
export function getInStream(pInputFrom) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
if ("-" === pInputFrom) {
|
|
53
|
+
return process.stdin;
|
|
54
|
+
}
|
|
55
|
+
return createReadStream(pInputFrom);
|
|
59
56
|
}
|