dependency-cruiser 12.5.1 → 12.7.0
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/README.md +11 -3
- package/bin/dependency-cruise.js +6 -0
- package/package.json +12 -12
- package/src/cli/index.js +3 -1
- package/src/cli/listeners/ndjson.js +90 -0
- package/src/cli/listeners/performance-log/format-helpers.js +10 -7
- package/src/cli/listeners/performance-log/handlers.js +19 -7
- package/src/enrich/derive/{circular/index.js → circular.js} +15 -16
- package/src/enrich/derive/folders/aggregate-to-folders.js +6 -5
- package/src/enrich/derive/folders/index.js +1 -2
- package/src/enrich/derive/metrics/get-module-metrics.js +4 -3
- package/src/enrich/derive/metrics/index.js +3 -4
- package/src/enrich/derive/module-utl.js +1 -33
- package/src/enrich/derive/{reachable/index.js → reachable.js} +22 -13
- package/src/enrich/enrich-modules.js +3 -3
- package/src/enrich/index.js +0 -3
- package/src/extract/gather-initial-sources.js +13 -13
- package/src/graph-utl/indexed-module-graph.js +80 -6
- package/src/meta.js +1 -1
- package/src/schema/configuration.schema.js +1 -1
- package/src/schema/cruise-result.schema.js +1 -1
- package/src/utl/find-all-files.js +4 -6
- package/types/options.d.ts +5 -1
- package/src/enrich/clear-caches.js +0 -5
- package/src/enrich/derive/circular/get-cycle.js +0 -70
- package/src/enrich/derive/reachable/get-path.js +0 -29
package/README.md
CHANGED
|
@@ -30,17 +30,25 @@ npx depcruise --init
|
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
This will look around in your environment a bit, ask you some questions and create
|
|
33
|
-
a `.dependency-cruiser.js` configuration file attuned to your project[^1].
|
|
33
|
+
a `.dependency-cruiser.js` configuration file attuned to your project[^1][^2].
|
|
34
34
|
|
|
35
35
|
[^1]:
|
|
36
36
|
We're using `npx` in the example scripts for convenience. When you use the
|
|
37
37
|
commands in a script in `package.json` it's not necessary to prefix them with
|
|
38
38
|
`npx`.
|
|
39
39
|
|
|
40
|
+
[^2]:
|
|
41
|
+
If you don't don't want to use `npx`, but instead `pnpx` (from the `pnpm`
|
|
42
|
+
package manager) or `yarn` - please refer to that tool's documentation.
|
|
43
|
+
Particularly `pnpx` has semantics that differ from `npx` quite significantly
|
|
44
|
+
and that you want to be aware of before using it. In the mean time: `npx`
|
|
45
|
+
_should_ work even when you installed the dependency with a package manager
|
|
46
|
+
different from `npm`.
|
|
47
|
+
|
|
40
48
|
### Show stuff to your grandma
|
|
41
49
|
|
|
42
50
|
To create a graph of the dependencies in your src folder, you'd run dependency
|
|
43
|
-
cruiser with output type `dot` and run _GraphViz dot_[^
|
|
51
|
+
cruiser with output type `dot` and run _GraphViz dot_[^3] on the result. In
|
|
44
52
|
a one liner:
|
|
45
53
|
|
|
46
54
|
```shell
|
|
@@ -55,7 +63,7 @@ npx depcruise src --include-only "^src" --config --output-type dot | dot -T svg
|
|
|
55
63
|
we've [got her covered](./doc/cli.md#--output-type-specify-the-output-format)
|
|
56
64
|
as well.
|
|
57
65
|
|
|
58
|
-
[^
|
|
66
|
+
[^3]:
|
|
59
67
|
This assumes the GraphViz `dot` command is available - on most linux and
|
|
60
68
|
comparable systems this will be. In case it's not, see
|
|
61
69
|
[GraphViz' download page](https://www.graphviz.org/download/) for instructions
|
package/bin/dependency-cruise.js
CHANGED
|
@@ -88,6 +88,7 @@ try {
|
|
|
88
88
|
"-p, --progress [type]",
|
|
89
89
|
"show progress while dependency-cruiser is busy. Possible values: cli-feedback, performance-log, none"
|
|
90
90
|
)
|
|
91
|
+
.option("--no-progress", "Alias of --progress none")
|
|
91
92
|
.option(
|
|
92
93
|
"-d, --max-depth <n>",
|
|
93
94
|
"You probably want to use --collapse instead of --max-depth. " +
|
|
@@ -111,6 +112,11 @@ try {
|
|
|
111
112
|
"(experimental) strategy to use for detecting changed files in the cache. " +
|
|
112
113
|
"Possible values: metadata (= use git, the default), content"
|
|
113
114
|
)
|
|
115
|
+
.option(
|
|
116
|
+
"--no-cache",
|
|
117
|
+
"switch off caching. Overrides the 'cache' key in .dependency-cruiser.js " +
|
|
118
|
+
"and --cache options set earlier on the command line"
|
|
119
|
+
)
|
|
114
120
|
.option("--preserve-symlinks", `leave symlinks unchanged (off by default)`)
|
|
115
121
|
.option("-v, --validate [file]", `alias for --config`)
|
|
116
122
|
.option(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dependency-cruiser",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.7.0",
|
|
4
4
|
"description": "Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"static analysis",
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"test:i": "LANG=en_US.UTF-8 mocha --grep \"^\\[[I]\\]\"",
|
|
123
123
|
"test:u": "LANG=en_US.UTF-8 mocha --grep \"^\\[[U]\\]\"",
|
|
124
124
|
"test:e": "LANG=en_US.UTF-8 mocha --grep \"^\\[[E]\\]\"",
|
|
125
|
-
"test:cover": "LANG=en_US.UTF-8 c8 --check-coverage --statements 99.9 --branches 99.7 --functions 100 --lines 99.9 --exclude \"{bin,configs/*.js,configs/rules,configs/plugins/3d-*.js,configs/plugins/stats-*.js,doc,docs,coverage,test,tools,webpack.conf.js,tmp*,src/**/*.template.js,src/cli/tools/svg-in-html-snippets/script.snippet.js,src/cli/init-config/get-user-input.js,src/cli/listeners/*/index.js,src/cli/listeners/cli-feedback.js}\" --reporter text-summary --reporter html --reporter json-summary mocha",
|
|
125
|
+
"test:cover": "LANG=en_US.UTF-8 c8 --check-coverage --statements 99.9 --branches 99.7 --functions 100 --lines 99.9 --exclude \"{bin,configs/*.js,configs/rules,configs/plugins/3d-*.js,configs/plugins/stats-*.js,doc,docs,coverage,test,tools,webpack.conf.js,tmp*,src/**/*.template.js,src/cli/tools/svg-in-html-snippets/script.snippet.js,src/cli/init-config/get-user-input.js,src/cli/listeners/*/index.js,src/cli/listeners/{cli-feedback,ndjson}.js}\" --reporter text-summary --reporter html --reporter json-summary mocha",
|
|
126
126
|
"test:glob": "set -f && test \"`bin/dependency-cruise.js test/extract/__mocks__/gather-globbing/packages/**/src/**/*.js | grep \"no dependency violations found\"`\" = \"✔ no dependency violations found (6 modules, 0 dependencies cruised)\"",
|
|
127
127
|
"test:yarn-pnp": "npm-run-all test:yarn-pnp:cleanup test:yarn-pnp:pack test:yarn-pnp:copy test:yarn-pnp:install test:yarn-pnp:version test:yarn-pnp:run test:yarn-pnp:test test:yarn-pnp:cleanup",
|
|
128
128
|
"test:yarn-pnp:pack": "npm pack",
|
|
@@ -132,8 +132,8 @@
|
|
|
132
132
|
"test:yarn-pnp:run": "cd test/integration/yarn-pnp.testing-ground && yarn dependency-cruise:json",
|
|
133
133
|
"test:yarn-pnp:test": "cd test/integration/yarn-pnp.testing-ground && yarn test",
|
|
134
134
|
"test:yarn-pnp:cleanup": "shx rm -rf test/integration/yarn-pnp.testing-ground dependency-cruiser*.tgz",
|
|
135
|
-
"test:load": "hyperfine --warmup 3 --runs 30 \"bin/dependency-cruise.js
|
|
136
|
-
"test:load:short": "hyperfine --warmup 1 --runs 5 \"bin/dependency-cruise.js
|
|
135
|
+
"test:load": "hyperfine --warmup 3 --runs 30 \"bin/dependency-cruise.js src bin test configs types tools --ignore-known --validate --no-cache --no-progress\"",
|
|
136
|
+
"test:load:short": "hyperfine --warmup 1 --runs 5 \"bin/dependency-cruise.js src bin test configs types tools --ignore-known --validate --no-cache --no-progress\"",
|
|
137
137
|
"test:watch": "mocha --watch --watch-extensions=json --reporter=min test/\\*\\*/\\*.spec.js",
|
|
138
138
|
"update-dependencies": "npm-run-all upem:update upem:install build:clean build lint:fix depcruise test:cover",
|
|
139
139
|
"upem-outdated": "npm outdated --json --long | upem --dry-run",
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
"version": "npm-run-all build depcruise:graph:doc scm:stage"
|
|
143
143
|
},
|
|
144
144
|
"dependencies": {
|
|
145
|
-
"acorn": "8.8.
|
|
145
|
+
"acorn": "8.8.2",
|
|
146
146
|
"acorn-jsx": "5.3.2",
|
|
147
147
|
"acorn-jsx-walk": "2.0.0",
|
|
148
148
|
"acorn-loose": "8.3.0",
|
|
@@ -168,25 +168,25 @@
|
|
|
168
168
|
"semver-try-require": "6.0.0",
|
|
169
169
|
"teamcity-service-messages": "0.1.14",
|
|
170
170
|
"tsconfig-paths-webpack-plugin": "4.0.0",
|
|
171
|
-
"watskeburt": "0.9.
|
|
171
|
+
"watskeburt": "0.9.1",
|
|
172
172
|
"wrap-ansi": "^7.0.0"
|
|
173
173
|
},
|
|
174
174
|
"devDependencies": {
|
|
175
175
|
"@babel/core": "7.20.12",
|
|
176
176
|
"@babel/plugin-transform-modules-commonjs": "7.20.11",
|
|
177
177
|
"@babel/preset-typescript": "7.18.6",
|
|
178
|
-
"@swc/core": "1.3.
|
|
178
|
+
"@swc/core": "1.3.31",
|
|
179
179
|
"@types/lodash": "4.14.191",
|
|
180
180
|
"@types/node": "18.11.18",
|
|
181
181
|
"@types/prompts": "2.4.2",
|
|
182
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
183
|
-
"@typescript-eslint/parser": "5.
|
|
182
|
+
"@typescript-eslint/eslint-plugin": "5.50.0",
|
|
183
|
+
"@typescript-eslint/parser": "5.50.0",
|
|
184
184
|
"@vue/compiler-sfc": "3.2.45",
|
|
185
185
|
"c8": "7.12.0",
|
|
186
186
|
"chai": "4.3.7",
|
|
187
187
|
"chai-json-schema": "1.5.1",
|
|
188
188
|
"coffeescript": "2.7.0",
|
|
189
|
-
"eslint": "8.
|
|
189
|
+
"eslint": "8.33.0",
|
|
190
190
|
"eslint-config-moving-meadow": "4.0.2",
|
|
191
191
|
"eslint-config-prettier": "8.6.0",
|
|
192
192
|
"eslint-plugin-budapestian": "5.0.1",
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
"eslint-plugin-import": "2.27.5",
|
|
195
195
|
"eslint-plugin-mocha": "10.1.0",
|
|
196
196
|
"eslint-plugin-node": "11.1.0",
|
|
197
|
-
"eslint-plugin-security": "1.
|
|
197
|
+
"eslint-plugin-security": "1.7.0",
|
|
198
198
|
"eslint-plugin-unicorn": "^45.0.0",
|
|
199
199
|
"husky": "8.0.3",
|
|
200
200
|
"intercept-stdout": "0.1.2",
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"shx": "0.3.4",
|
|
208
208
|
"svelte": "3.55.1",
|
|
209
209
|
"symlink-dir": "5.1.0",
|
|
210
|
-
"typescript": "4.9.
|
|
210
|
+
"typescript": "4.9.5",
|
|
211
211
|
"upem": "7.3.1",
|
|
212
212
|
"vue-template-compiler": "2.7.14",
|
|
213
213
|
"yarn": "1.22.19"
|
package/src/cli/index.js
CHANGED
|
@@ -19,6 +19,7 @@ const io = require("./utl/io");
|
|
|
19
19
|
const formatMetaInfo = require("./format-meta-info");
|
|
20
20
|
const setUpCliFeedbackListener = require("./listeners/cli-feedback");
|
|
21
21
|
const setUpPerformanceLogListener = require("./listeners/performance-log");
|
|
22
|
+
const setUpNDJSONListener = require("./listeners/ndjson");
|
|
22
23
|
|
|
23
24
|
function extractResolveOptions(pCruiseOptions) {
|
|
24
25
|
let lResolveOptions = {};
|
|
@@ -78,6 +79,7 @@ function setUpListener(pCruiseOptions) {
|
|
|
78
79
|
const lString2Listener = {
|
|
79
80
|
"cli-feedback": setUpCliFeedbackListener,
|
|
80
81
|
"performance-log": setUpPerformanceLogListener,
|
|
82
|
+
ndjson: setUpNDJSONListener,
|
|
81
83
|
};
|
|
82
84
|
const lListenerID =
|
|
83
85
|
pCruiseOptions?.progress ??
|
|
@@ -162,7 +164,7 @@ module.exports = function executeCli(pFileDirectoryArray, pCruiseOptions) {
|
|
|
162
164
|
// (the start-up) of cruises by that same amount. We've since replaced
|
|
163
165
|
// inquirer with 'prompts' (which is much smaller), but the same reasoning
|
|
164
166
|
// holds.
|
|
165
|
-
// eslint-disable-next-line node/global-require
|
|
167
|
+
// eslint-disable-next-line node/global-require, import/max-dependencies
|
|
166
168
|
const initConfig = require("./init-config");
|
|
167
169
|
initConfig(lCruiseOptions.init);
|
|
168
170
|
} else {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const { EOL } = require("os");
|
|
2
|
+
const busLogLevels = require("../../utl/bus-log-levels");
|
|
3
|
+
|
|
4
|
+
const MICRO_SECONDS_PER_SECOND = 1000000;
|
|
5
|
+
|
|
6
|
+
function formatPerfLine({
|
|
7
|
+
runStartTime,
|
|
8
|
+
message,
|
|
9
|
+
time,
|
|
10
|
+
elapsedTime,
|
|
11
|
+
elapsedUser,
|
|
12
|
+
elapsedSystem,
|
|
13
|
+
rss,
|
|
14
|
+
heapUsed,
|
|
15
|
+
heapTotal,
|
|
16
|
+
external,
|
|
17
|
+
}) {
|
|
18
|
+
return (
|
|
19
|
+
JSON.stringify({
|
|
20
|
+
runStartTime,
|
|
21
|
+
message,
|
|
22
|
+
time: Math.round(time * MICRO_SECONDS_PER_SECOND),
|
|
23
|
+
elapsedTime: Math.round(elapsedTime * MICRO_SECONDS_PER_SECOND),
|
|
24
|
+
elapsedUser,
|
|
25
|
+
elapsedSystem,
|
|
26
|
+
rss,
|
|
27
|
+
heapUsed,
|
|
28
|
+
heapTotal,
|
|
29
|
+
external,
|
|
30
|
+
}) + EOL
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function getProgressLine(pMessage, pState, pLevel, pMaxLevel) {
|
|
35
|
+
let lReturnValue = "";
|
|
36
|
+
|
|
37
|
+
if (pLevel <= pMaxLevel) {
|
|
38
|
+
const lTime = process.uptime();
|
|
39
|
+
const { user, system } = process.cpuUsage();
|
|
40
|
+
const { rss, heapTotal, heapUsed, external } = process.memoryUsage();
|
|
41
|
+
const lStats = {
|
|
42
|
+
runStartTime: pState.runStartTime,
|
|
43
|
+
message: pState.previousMessage,
|
|
44
|
+
time: lTime,
|
|
45
|
+
elapsedTime: lTime - pState.previousTime,
|
|
46
|
+
elapsedUser: user - pState.previousUserUsage,
|
|
47
|
+
elapsedSystem: system - pState.previousSystemUsage,
|
|
48
|
+
rss,
|
|
49
|
+
heapUsed,
|
|
50
|
+
heapTotal,
|
|
51
|
+
external,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
pState.previousMessage = pMessage;
|
|
55
|
+
pState.previousTime = lTime;
|
|
56
|
+
pState.previousUserUsage = user;
|
|
57
|
+
pState.previousSystemUsage = system;
|
|
58
|
+
|
|
59
|
+
lReturnValue = formatPerfLine(lStats);
|
|
60
|
+
}
|
|
61
|
+
return lReturnValue;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function getProgressWriter(pStream, pState, pMaxLevel) {
|
|
65
|
+
return (pMessage, pOptions) => {
|
|
66
|
+
const lOptions = { level: busLogLevels.SUMMARY, ...(pOptions || {}) };
|
|
67
|
+
|
|
68
|
+
pStream.write(getProgressLine(pMessage, pState, lOptions.level, pMaxLevel));
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
module.exports = function setUpNDJSONListener(
|
|
73
|
+
pEventEmitter,
|
|
74
|
+
pMaxLevel = busLogLevels.INFO,
|
|
75
|
+
pStream = process.stderr
|
|
76
|
+
) {
|
|
77
|
+
let lState = {
|
|
78
|
+
runStartTime: new Date(Date.now()).toISOString(),
|
|
79
|
+
previousMessage: "start of node process",
|
|
80
|
+
previousTime: 0,
|
|
81
|
+
previousUserUsage: 0,
|
|
82
|
+
previousSystemUsage: 0,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
pEventEmitter.on("progress", getProgressWriter(pStream, lState, pMaxLevel));
|
|
86
|
+
|
|
87
|
+
pEventEmitter.on("end", () => {
|
|
88
|
+
pStream.end();
|
|
89
|
+
});
|
|
90
|
+
};
|
|
@@ -2,7 +2,7 @@ const chalk = require("chalk");
|
|
|
2
2
|
|
|
3
3
|
const MS_PER_SECOND = 1000;
|
|
4
4
|
const MS_PER_MICRO_SECOND = 0.001;
|
|
5
|
-
const
|
|
5
|
+
const MAX_EXPECTED_LENGTH = 13;
|
|
6
6
|
const NUMBER_OF_COLUMNS = 8;
|
|
7
7
|
const K = 1024;
|
|
8
8
|
/*
|
|
@@ -28,7 +28,11 @@ const gSizeFormat = new Intl.NumberFormat(LOCALE, {
|
|
|
28
28
|
maximumFractionDigits: 0,
|
|
29
29
|
}).format;
|
|
30
30
|
|
|
31
|
-
const pad = (pString) => pString.padStart(
|
|
31
|
+
const pad = (pString) => pString.padStart(MAX_EXPECTED_LENGTH).concat(" ");
|
|
32
|
+
|
|
33
|
+
function formatDividerLine() {
|
|
34
|
+
return `${`${"-".repeat(MAX_EXPECTED_LENGTH)} `.repeat(NUMBER_OF_COLUMNS)}\n`;
|
|
35
|
+
}
|
|
32
36
|
|
|
33
37
|
function formatHeader() {
|
|
34
38
|
return chalk
|
|
@@ -43,19 +47,17 @@ function formatHeader() {
|
|
|
43
47
|
pad("∆ external")
|
|
44
48
|
}after step...\n`
|
|
45
49
|
)
|
|
46
|
-
.concat(
|
|
47
|
-
`${`${"-".repeat(MAX_LENGTH_EXPECTED)} `.repeat(NUMBER_OF_COLUMNS)}\n`
|
|
48
|
-
);
|
|
50
|
+
.concat(formatDividerLine());
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
function formatTime(pNumber, pConversionMultiplier = MS_PER_SECOND) {
|
|
52
54
|
return gTimeFormat(pConversionMultiplier * pNumber)
|
|
53
|
-
.padStart(
|
|
55
|
+
.padStart(MAX_EXPECTED_LENGTH)
|
|
54
56
|
.concat(" ");
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
function formatMemory(pBytes) {
|
|
58
|
-
const lReturnValue = gSizeFormat(pBytes / K).padStart(
|
|
60
|
+
const lReturnValue = gSizeFormat(pBytes / K).padStart(MAX_EXPECTED_LENGTH);
|
|
59
61
|
|
|
60
62
|
return (pBytes < 0 ? chalk.blue(lReturnValue) : lReturnValue).concat(" ");
|
|
61
63
|
}
|
|
@@ -87,4 +89,5 @@ module.exports = {
|
|
|
87
89
|
formatMemory,
|
|
88
90
|
formatPerfLine,
|
|
89
91
|
formatHeader,
|
|
92
|
+
formatDividerLine,
|
|
90
93
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
const {
|
|
2
|
-
formatTime,
|
|
3
2
|
formatPerfLine,
|
|
4
3
|
formatHeader,
|
|
5
|
-
|
|
4
|
+
formatDividerLine,
|
|
6
5
|
} = require("./format-helpers");
|
|
7
6
|
|
|
8
7
|
function getHeader(pLevel, pMaxLevel) {
|
|
@@ -47,11 +46,24 @@ function getProgressLine(pMessage, pState, pLevel, pMaxLevel) {
|
|
|
47
46
|
function getEndText(pState, pLevel, pMaxLevel) {
|
|
48
47
|
if (pLevel <= pMaxLevel) {
|
|
49
48
|
const lTime = process.uptime();
|
|
50
|
-
const {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return
|
|
49
|
+
const { user, system } = process.cpuUsage();
|
|
50
|
+
const { heapUsed, heapTotal, external, rss } = process.memoryUsage();
|
|
51
|
+
pState.previousMessage = "really done";
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
getProgressLine("", pState, pLevel, pMaxLevel) +
|
|
55
|
+
formatDividerLine() +
|
|
56
|
+
formatPerfLine({
|
|
57
|
+
elapsedTime: lTime,
|
|
58
|
+
elapsedUser: user,
|
|
59
|
+
elapsedSystem: system,
|
|
60
|
+
deltaRss: rss,
|
|
61
|
+
deltaHeapUsed: heapUsed,
|
|
62
|
+
deltaHeapTotal: heapTotal,
|
|
63
|
+
deltaExternal: external,
|
|
64
|
+
message: "",
|
|
65
|
+
})
|
|
66
|
+
);
|
|
55
67
|
}
|
|
56
68
|
return "";
|
|
57
69
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/* eslint-disable security/detect-object-injection */
|
|
2
|
-
const getCycle = require("./get-cycle");
|
|
3
2
|
|
|
4
3
|
function addCircularityCheckToDependency(
|
|
5
|
-
|
|
4
|
+
pIndexedGraph,
|
|
6
5
|
pFrom,
|
|
7
6
|
pToDep,
|
|
8
|
-
|
|
7
|
+
pDependencyName
|
|
9
8
|
) {
|
|
10
9
|
let lReturnValue = {
|
|
11
10
|
...pToDep,
|
|
12
11
|
circular: false,
|
|
13
12
|
};
|
|
14
|
-
const lCycle = getCycle(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
const lCycle = pIndexedGraph.getCycle(
|
|
14
|
+
pFrom,
|
|
15
|
+
pToDep[pDependencyName],
|
|
16
|
+
pDependencyName
|
|
17
|
+
);
|
|
18
18
|
|
|
19
19
|
if (lCycle.length > 0) {
|
|
20
20
|
lReturnValue = {
|
|
@@ -32,21 +32,20 @@ function addCircularityCheckToDependency(
|
|
|
32
32
|
* whether it's (part of a) circular (relationship) and returns the
|
|
33
33
|
* dependencies with that added.
|
|
34
34
|
*/
|
|
35
|
-
module.exports = (
|
|
35
|
+
module.exports = function detectAndAddCycles(
|
|
36
36
|
pNodes,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
pIndexedNodes,
|
|
38
|
+
{ pSourceAttribute, pDependencyName }
|
|
39
|
+
) {
|
|
40
|
+
return pNodes.map((pModule) => ({
|
|
40
41
|
...pModule,
|
|
41
42
|
dependencies: pModule.dependencies.map((pToDep) =>
|
|
42
43
|
addCircularityCheckToDependency(
|
|
43
|
-
|
|
44
|
+
pIndexedNodes,
|
|
44
45
|
pModule[pSourceAttribute],
|
|
45
46
|
pToDep,
|
|
46
|
-
|
|
47
|
-
pDependencyName,
|
|
48
|
-
pFindNodeByName,
|
|
49
|
-
}
|
|
47
|
+
pDependencyName
|
|
50
48
|
)
|
|
51
49
|
),
|
|
52
50
|
}));
|
|
51
|
+
};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
const path = require("path").posix;
|
|
3
3
|
const { calculateInstability, metricsAreCalculable } = require("../module-utl");
|
|
4
4
|
const detectCycles = require("../circular");
|
|
5
|
+
const IndexedModuleGraph = require("../../../graph-utl/indexed-module-graph");
|
|
5
6
|
const {
|
|
6
7
|
findFolderByName,
|
|
7
8
|
getAfferentCouplings,
|
|
@@ -82,7 +83,7 @@ function calculateFolderMetrics(pFolder) {
|
|
|
82
83
|
};
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
function
|
|
86
|
+
function deNormalizeInstability(pFolder, _, pAllFolders) {
|
|
86
87
|
return {
|
|
87
88
|
...pFolder,
|
|
88
89
|
dependencies: pFolder.dependencies.map((pDependency) => {
|
|
@@ -114,15 +115,15 @@ function getSinks(pFolders) {
|
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
module.exports = function aggregateToFolders(pModules) {
|
|
117
|
-
|
|
118
|
+
let lFolders = object2Array(
|
|
118
119
|
pModules.filter(metricsAreCalculable).reduce(aggregateToFolder, {})
|
|
119
120
|
)
|
|
120
121
|
.map(calculateFolderMetrics)
|
|
121
|
-
.map(
|
|
122
|
+
.map(deNormalizeInstability);
|
|
123
|
+
lFolders = lFolders.concat(getSinks(lFolders));
|
|
122
124
|
|
|
123
|
-
return detectCycles(lFolders
|
|
125
|
+
return detectCycles(lFolders, new IndexedModuleGraph(lFolders, "name"), {
|
|
124
126
|
pSourceAttribute: "name",
|
|
125
127
|
pDependencyName: "name",
|
|
126
|
-
pFindNodeByName: findFolderByName,
|
|
127
128
|
});
|
|
128
129
|
};
|
|
@@ -2,8 +2,7 @@ const validate = require("../../../validate");
|
|
|
2
2
|
const aggregateToFolders = require("./aggregate-to-folders");
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @param {*} pFolder
|
|
5
|
+
* @param {import("../../../..").IFolder} pFolder
|
|
7
6
|
* @param {import('../../../..').IOptions} pOptions
|
|
8
7
|
* @returns
|
|
9
8
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const IndexedModuleGraph = require("../../../graph-utl/indexed-module-graph");
|
|
2
2
|
const { calculateInstability, metricsAreCalculable } = require("../module-utl");
|
|
3
3
|
|
|
4
4
|
function addInstabilityMetric(pModule) {
|
|
@@ -16,11 +16,12 @@ function addInstabilityMetric(pModule) {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
function addInstabilityToDependency(pAllModules) {
|
|
19
|
+
const lIndexedModules = new IndexedModuleGraph(pAllModules);
|
|
19
20
|
return (pDependency) => ({
|
|
20
21
|
...pDependency,
|
|
21
22
|
instability:
|
|
22
|
-
(findModuleByName(
|
|
23
|
-
|
|
23
|
+
(lIndexedModules.findModuleByName(pDependency.resolved) || {})
|
|
24
|
+
.instability || 0,
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const { clearCache } = require("../module-utl");
|
|
2
1
|
const {
|
|
3
2
|
addInstabilityMetric,
|
|
4
3
|
deNormalizeInstabilityMetricsToDependencies,
|
|
@@ -6,9 +5,9 @@ const {
|
|
|
6
5
|
|
|
7
6
|
module.exports = function deriveModulesMetrics(pModules, pOptions) {
|
|
8
7
|
if (pOptions.metrics) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
return pModules
|
|
9
|
+
.map(addInstabilityMetric)
|
|
10
|
+
.map(deNormalizeInstabilityMetricsToDependencies);
|
|
12
11
|
}
|
|
13
12
|
return pModules;
|
|
14
13
|
};
|
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
/** @type {Map<string,import('../../../types/cruise-result').IModule>} */
|
|
2
|
-
let gIndexedGraph = null;
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Returns the module with attribute pSource, when it exists in the pModuleGraph.
|
|
6
|
-
* Returns undefined when it doesn't.
|
|
7
|
-
*
|
|
8
|
-
* This function uses an indexed cache for efficiency reasons. If you need to
|
|
9
|
-
* call this function consecutively for different module graphs, you can clear
|
|
10
|
-
* this cache with the clearCache function from this module.
|
|
11
|
-
*
|
|
12
|
-
* TODO: use IndexedModuleGraph class from src/graph-utl in stead
|
|
13
|
-
*
|
|
14
|
-
* @param {import('../../../types/cruise-result').IModule[]} pModuleGraph
|
|
15
|
-
* @param {string} pSource
|
|
16
|
-
* @returns {import('../../../types/cruise-result').IModule | undefined}
|
|
17
|
-
*/
|
|
18
|
-
function findModuleByName(pModuleGraph, pSource) {
|
|
19
|
-
if (!gIndexedGraph) {
|
|
20
|
-
gIndexedGraph = new Map(
|
|
21
|
-
pModuleGraph.map((pModule) => [pModule.source, pModule])
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
return gIndexedGraph.get(pSource);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
1
|
function isDependent(pResolvedName) {
|
|
28
2
|
return (pModule) =>
|
|
29
3
|
pModule.dependencies.some(
|
|
@@ -41,7 +15,7 @@ function metricsAreCalculable(pModule) {
|
|
|
41
15
|
|
|
42
16
|
/**
|
|
43
17
|
* returns the Instability of a component given the number of incoming (afferent)
|
|
44
|
-
* and
|
|
18
|
+
* and outgoing (efferent) connections ('couplings')
|
|
45
19
|
*
|
|
46
20
|
* @param {number} pEfferentCouplingCount
|
|
47
21
|
* @param {number} pAfferentCouplingCount
|
|
@@ -57,13 +31,7 @@ function calculateInstability(pEfferentCouplingCount, pAfferentCouplingCount) {
|
|
|
57
31
|
);
|
|
58
32
|
}
|
|
59
33
|
|
|
60
|
-
function clearCache() {
|
|
61
|
-
gIndexedGraph = null;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
34
|
module.exports = {
|
|
65
|
-
findModuleByName,
|
|
66
|
-
clearCache,
|
|
67
35
|
isDependent,
|
|
68
36
|
metricsAreCalculable,
|
|
69
37
|
calculateInstability,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable security/detect-object-injection, no-inline-comments */
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const cloneDeep = require("lodash/cloneDeep");
|
|
4
4
|
const has = require("lodash/has");
|
|
5
|
-
const matchers = require("
|
|
6
|
-
const { extractGroups } = require("
|
|
7
|
-
const
|
|
5
|
+
const matchers = require("../../validate/matchers");
|
|
6
|
+
const { extractGroups } = require("../../utl/regex-util");
|
|
7
|
+
const IndexedModuleGraph = require("../../graph-utl/indexed-module-graph");
|
|
8
8
|
|
|
9
9
|
function getReachableRules(pRuleSet) {
|
|
10
10
|
return (pRuleSet?.forbidden ?? [])
|
|
@@ -105,14 +105,14 @@ function shouldAddReachable(pRule, pModuleTo, pGraph) {
|
|
|
105
105
|
return lReturnValue;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
function addReachesToModule(pModule, pGraph, pReachableRule) {
|
|
108
|
+
function addReachesToModule(pModule, pGraph, pIndexedGraph, pReachableRule) {
|
|
109
109
|
const lToModules = pGraph.filter((pToModule) =>
|
|
110
110
|
isModuleInRuleTo(pReachableRule, pToModule, pModule)
|
|
111
111
|
);
|
|
112
112
|
|
|
113
113
|
for (let lToModule of lToModules) {
|
|
114
114
|
if (pModule.source !== lToModule.source) {
|
|
115
|
-
const lPath = getPath(
|
|
115
|
+
const lPath = pIndexedGraph.getPath(pModule.source, lToModule.source);
|
|
116
116
|
|
|
117
117
|
if (lPath.length > 0) {
|
|
118
118
|
pModule.reaches = mergeReachesProperties(
|
|
@@ -127,7 +127,7 @@ function addReachesToModule(pModule, pGraph, pReachableRule) {
|
|
|
127
127
|
return pModule;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
function addReachableToModule(pModule, pGraph, pReachableRule) {
|
|
130
|
+
function addReachableToModule(pModule, pGraph, pIndexedGraph, pReachableRule) {
|
|
131
131
|
const lFromModules = pGraph.filter(isModuleInRuleFrom(pReachableRule));
|
|
132
132
|
let lFound = false;
|
|
133
133
|
|
|
@@ -137,7 +137,7 @@ function addReachableToModule(pModule, pGraph, pReachableRule) {
|
|
|
137
137
|
pModule.source !== lFromModule.source &&
|
|
138
138
|
isModuleInRuleTo(pReachableRule, pModule, lFromModule)
|
|
139
139
|
) {
|
|
140
|
-
const lPath = getPath(
|
|
140
|
+
const lPath = pIndexedGraph.getPath(lFromModule.source, pModule.source);
|
|
141
141
|
|
|
142
142
|
lFound = lPath.length > 0;
|
|
143
143
|
pModule.reachable = mergeReachableProperties(
|
|
@@ -151,17 +151,23 @@ function addReachableToModule(pModule, pGraph, pReachableRule) {
|
|
|
151
151
|
return pModule;
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
function addReachabilityToGraph(pGraph, pReachableRule) {
|
|
154
|
+
function addReachabilityToGraph(pGraph, pIndexedGraph, pReachableRule) {
|
|
155
155
|
return pGraph.map((pModule) => {
|
|
156
|
-
let lClonedModule =
|
|
156
|
+
let lClonedModule = cloneDeep(pModule);
|
|
157
157
|
|
|
158
158
|
if (shouldAddReaches(pReachableRule, lClonedModule)) {
|
|
159
|
-
lClonedModule = addReachesToModule(
|
|
159
|
+
lClonedModule = addReachesToModule(
|
|
160
|
+
lClonedModule,
|
|
161
|
+
pGraph,
|
|
162
|
+
pIndexedGraph,
|
|
163
|
+
pReachableRule
|
|
164
|
+
);
|
|
160
165
|
}
|
|
161
166
|
if (shouldAddReachable(pReachableRule, lClonedModule, pGraph)) {
|
|
162
167
|
lClonedModule = addReachableToModule(
|
|
163
168
|
lClonedModule,
|
|
164
169
|
pGraph,
|
|
170
|
+
pIndexedGraph,
|
|
165
171
|
pReachableRule
|
|
166
172
|
);
|
|
167
173
|
}
|
|
@@ -171,9 +177,12 @@ function addReachabilityToGraph(pGraph, pReachableRule) {
|
|
|
171
177
|
|
|
172
178
|
module.exports = function deriveReachables(pGraph, pRuleSet) {
|
|
173
179
|
const lReachableRules = pRuleSet ? getReachableRules(pRuleSet) : [];
|
|
180
|
+
const lIndexedGraph =
|
|
181
|
+
lReachableRules.length > 0 ? new IndexedModuleGraph(pGraph) : {};
|
|
174
182
|
|
|
175
183
|
return lReachableRules.reduce(
|
|
176
|
-
(pReturnGraph, pRule) =>
|
|
177
|
-
|
|
184
|
+
(pReturnGraph, pRule) =>
|
|
185
|
+
addReachabilityToGraph(pReturnGraph, lIndexedGraph, pRule),
|
|
186
|
+
cloneDeep(pGraph)
|
|
178
187
|
);
|
|
179
188
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const bus = require("../utl/bus");
|
|
2
2
|
const busLogLevels = require("../utl/bus-log-levels");
|
|
3
3
|
const addFocus = require("../../src/graph-utl/add-focus");
|
|
4
|
+
const IndexedModuleGraph = require("../graph-utl/indexed-module-graph");
|
|
4
5
|
const deriveCycles = require("./derive/circular");
|
|
5
6
|
const deriveOrphans = require("./derive/orphan");
|
|
6
7
|
const addDependents = require("./derive/dependents");
|
|
@@ -8,14 +9,13 @@ const deriveReachable = require("./derive/reachable");
|
|
|
8
9
|
const addValidations = require("./add-validations");
|
|
9
10
|
const softenKnownViolations = require("./soften-known-violations");
|
|
10
11
|
const deriveModuleMetrics = require("./derive/metrics");
|
|
11
|
-
const { findModuleByName } = require("./derive/module-utl");
|
|
12
12
|
|
|
13
13
|
module.exports = function enrichModules(pModules, pOptions) {
|
|
14
14
|
bus.emit("progress", "analyzing: cycles", { level: busLogLevels.INFO });
|
|
15
|
-
|
|
15
|
+
const lIndexedModules = new IndexedModuleGraph(pModules);
|
|
16
|
+
let lModules = deriveCycles(pModules, lIndexedModules, {
|
|
16
17
|
pSourceAttribute: "source",
|
|
17
18
|
pDependencyName: "resolved",
|
|
18
|
-
pFindNodeByName: findModuleByName,
|
|
19
19
|
});
|
|
20
20
|
bus.emit("progress", "analyzing: dependents", { level: busLogLevels.INFO });
|
|
21
21
|
lModules = addDependents(lModules, pOptions);
|
package/src/enrich/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const enrichModules = require("./enrich-modules");
|
|
2
2
|
const aggregateToFolders = require("./derive/folders");
|
|
3
3
|
const summarize = require("./summarize");
|
|
4
|
-
const clearCaches = require("./clear-caches");
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* Enriches the passed modules with things like cycle detection, validations,
|
|
@@ -17,11 +16,9 @@ const clearCaches = require("./clear-caches");
|
|
|
17
16
|
* @returns {import("../..").ICruiseResult}
|
|
18
17
|
*/
|
|
19
18
|
module.exports = function enrich(pModules, pOptions, pFileAndDirectoryArray) {
|
|
20
|
-
clearCaches();
|
|
21
19
|
const lModules = enrichModules(pModules, pOptions);
|
|
22
20
|
const lFolders = aggregateToFolders(lModules, pOptions);
|
|
23
21
|
|
|
24
|
-
clearCaches();
|
|
25
22
|
const lReturnValue = {
|
|
26
23
|
modules: lModules,
|
|
27
24
|
...lFolders,
|
|
@@ -53,19 +53,19 @@ function gatherScannableFilesFromDirectory(pDirectoryName, pOptions) {
|
|
|
53
53
|
shouldNotBeExcluded(pathToPosix(pFullPathToFile), pOptions)
|
|
54
54
|
)
|
|
55
55
|
.reduce((pSum, pFullPathToFile) => {
|
|
56
|
-
let lStat = {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
56
|
+
let lStat = fs.statSync(path.join(pOptions.baseDir, pFullPathToFile), {
|
|
57
|
+
throwIfNoEntry: false,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (lStat) {
|
|
61
|
+
if (lStat.isDirectory()) {
|
|
62
|
+
return pSum.concat(
|
|
63
|
+
gatherScannableFilesFromDirectory(pFullPathToFile, pOptions)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
if (fileIsScannable(pOptions, pFullPathToFile)) {
|
|
67
|
+
return pSum.concat(pFullPathToFile);
|
|
68
|
+
}
|
|
69
69
|
}
|
|
70
70
|
return pSum;
|
|
71
71
|
}, [])
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
/* eslint-disable security/detect-object-injection */
|
|
1
2
|
module.exports = class IndexedModuleGraph {
|
|
2
|
-
init(pModules) {
|
|
3
|
+
init(pModules, pIndexAttribute) {
|
|
3
4
|
this.indexedGraph = new Map(
|
|
4
|
-
pModules.map((pModule) => [pModule
|
|
5
|
+
pModules.map((pModule) => [pModule[pIndexAttribute], pModule])
|
|
5
6
|
);
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
constructor(pModules) {
|
|
9
|
-
this.init(pModules);
|
|
9
|
+
constructor(pModules, pIndexAttribute = "source") {
|
|
10
|
+
this.init(pModules, pIndexAttribute);
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
14
|
* @param {string} pName
|
|
15
|
-
* @return {import("
|
|
15
|
+
* @return {import("..").IModule}
|
|
16
16
|
*/
|
|
17
17
|
findModuleByName(pName) {
|
|
18
18
|
return this.indexedGraph.get(pName);
|
|
@@ -102,4 +102,78 @@ module.exports = class IndexedModuleGraph {
|
|
|
102
102
|
}
|
|
103
103
|
return lReturnValue;
|
|
104
104
|
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @param {string} pFrom
|
|
108
|
+
* @param {string} pTo
|
|
109
|
+
* @param {Set<string>} pVisited
|
|
110
|
+
* @returns {string[]}
|
|
111
|
+
*/
|
|
112
|
+
getPath(pFrom, pTo, pVisited = new Set()) {
|
|
113
|
+
let lReturnValue = [];
|
|
114
|
+
const lFromNode = this.findModuleByName(pFrom);
|
|
115
|
+
|
|
116
|
+
pVisited.add(pFrom);
|
|
117
|
+
|
|
118
|
+
if (lFromNode) {
|
|
119
|
+
const lDirectUnvisitedDependencies = lFromNode.dependencies
|
|
120
|
+
.filter((pDependency) => !pVisited.has(pDependency.resolved))
|
|
121
|
+
.map((pDependency) => pDependency.resolved);
|
|
122
|
+
if (lDirectUnvisitedDependencies.includes(pTo)) {
|
|
123
|
+
lReturnValue = [pFrom, pTo];
|
|
124
|
+
} else {
|
|
125
|
+
for (const lFrom of lDirectUnvisitedDependencies) {
|
|
126
|
+
let lCandidatePath = this.getPath(lFrom, pTo, pVisited);
|
|
127
|
+
// eslint-disable-next-line max-depth
|
|
128
|
+
if (lCandidatePath.length > 0) {
|
|
129
|
+
lReturnValue = [pFrom].concat(lCandidatePath);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return lReturnValue;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Returns the first non-zero length path from pInitialSource to pInitialSource
|
|
140
|
+
* Returns the empty array if there is no such path
|
|
141
|
+
*
|
|
142
|
+
* @param {string} pInitialSource The 'source' attribute of the node to be tested
|
|
143
|
+
* (source uniquely identifying a node)
|
|
144
|
+
* @param {string} pCurrentSource The 'source' attribute of the 'to' node to
|
|
145
|
+
* be traversed
|
|
146
|
+
* @param {string} pDependencyName The attribute name of the dependency to use.
|
|
147
|
+
* defaults to "resolved" (which is in use for
|
|
148
|
+
* modules). For folders pass "name"
|
|
149
|
+
* @return {string[]} see description above
|
|
150
|
+
*/
|
|
151
|
+
getCycle(pInitialSource, pCurrentSource, pDependencyName, pVisited) {
|
|
152
|
+
let lVisited = pVisited || new Set();
|
|
153
|
+
const lCurrentNode = this.findModuleByName(pCurrentSource);
|
|
154
|
+
const lDependencies = lCurrentNode.dependencies.filter(
|
|
155
|
+
(pDependency) => !lVisited.has(pDependency[pDependencyName])
|
|
156
|
+
);
|
|
157
|
+
const lMatch = lDependencies.find(
|
|
158
|
+
(pDependency) => pDependency[pDependencyName] === pInitialSource
|
|
159
|
+
);
|
|
160
|
+
if (lMatch) {
|
|
161
|
+
return [pCurrentSource, lMatch[pDependencyName]];
|
|
162
|
+
}
|
|
163
|
+
return lDependencies.reduce((pAll, pDependency) => {
|
|
164
|
+
if (!pAll.includes(pCurrentSource)) {
|
|
165
|
+
const lCycle = this.getCycle(
|
|
166
|
+
pInitialSource,
|
|
167
|
+
pDependency[pDependencyName],
|
|
168
|
+
pDependencyName,
|
|
169
|
+
lVisited.add(pDependency[pDependencyName])
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
if (lCycle.length > 0 && !lCycle.includes(pCurrentSource)) {
|
|
173
|
+
return pAll.concat(pCurrentSource).concat(lCycle);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return pAll;
|
|
177
|
+
}, []);
|
|
178
|
+
}
|
|
105
179
|
};
|
package/src/meta.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* generated - don't edit */
|
|
2
|
-
module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"reaches":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundReachesType"}]},"highlight":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundHighlightType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]},"maximumLevel":{"type":"number","enum":[-1,40,50,60,70,80,99]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean"},{"type":"string"},{"$ref":"#/definitions/CacheOptionsType"}]}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"CacheOptionsType":{"type":"object","additionalProperties":false,"properties":{"folder":{"type":"string"},"strategy":{"$ref":"#/definitions/CacheStrategyType"}}},"CacheStrategyType":{"type":"string","enum":["metadata","content"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
|
|
2
|
+
module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"reaches":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundReachesType"}]},"highlight":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundHighlightType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","ndjson","none"]},"maximumLevel":{"type":"number","enum":[-1,40,50,60,70,80,99]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean"},{"type":"string"},{"$ref":"#/definitions/CacheOptionsType"}]}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"CacheOptionsType":{"type":"object","additionalProperties":false,"properties":{"folder":{"type":"string"},"strategy":{"$ref":"#/definitions/CacheStrategyType"}}},"CacheStrategyType":{"type":"string","enum":["metadata","content"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* generated - don't edit */
|
|
2
|
-
module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"},"revisionData":{"$ref":"#/definitions/RevisionDataType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"matchesReaches":{"type":"boolean"},"matchesHighlight":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid","circular"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"},"highlight":{"$ref":"#/definitions/CompoundHighlightType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]},"maximumLevel":{"type":"number","enum":[-1,40,50,60,70,80,99]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean","enum":[false]},{"$ref":"#/definitions/CacheOptionsType"}]},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics","markdown","mermaid"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"CacheOptionsType":{"type":"object","additionalProperties":false,"properties":{"folder":{"type":"string"},"strategy":{"$ref":"#/definitions/CacheStrategyType"}}},"CacheStrategyType":{"type":"string","enum":["metadata","content"]},"RevisionDataType":{"type":"object","required":["SHA1","changes"],"properties":{"SHA1":{"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["name","changeType"],"properties":{"name":{"type":"string"},"changeType":{"type":"string","enum":["added","copied","deleted","modified","renamed","type changed","unmerged","pairing broken","unknown","unmodified","untracked","ignored"]},"oldName":{"type":"string"},"checksum":{"type":"string"},"args":{"type":"array","items":{"type":"string"}},"rulesFile":{"type":"string"}}}}}}}}
|
|
2
|
+
module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"},"revisionData":{"$ref":"#/definitions/RevisionDataType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"matchesReaches":{"type":"boolean"},"matchesHighlight":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid","circular"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"},"highlight":{"$ref":"#/definitions/CompoundHighlightType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","ndjson","none"]},"maximumLevel":{"type":"number","enum":[-1,40,50,60,70,80,99]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean","enum":[false]},{"$ref":"#/definitions/CacheOptionsType"}]},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics","markdown","mermaid"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"CacheOptionsType":{"type":"object","additionalProperties":false,"properties":{"folder":{"type":"string"},"strategy":{"$ref":"#/definitions/CacheStrategyType"}}},"CacheStrategyType":{"type":"string","enum":["metadata","content"]},"RevisionDataType":{"type":"object","required":["SHA1","changes"],"properties":{"SHA1":{"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["name","changeType"],"properties":{"name":{"type":"string"},"changeType":{"type":"string","enum":["added","copied","deleted","modified","renamed","type changed","unmerged","pairing broken","unknown","unmodified","untracked","ignored"]},"oldName":{"type":"string"},"checksum":{"type":"string"},"args":{"type":"array","items":{"type":"string"}},"rulesFile":{"type":"string"}}}}}}}}
|
|
@@ -13,12 +13,10 @@ const pathToPosix = require("./path-to-posix");
|
|
|
13
13
|
* @returns {boolean}
|
|
14
14
|
*/
|
|
15
15
|
function fileIsDirectory(pFullPathToFile, pBaseDirectory) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
16
|
+
const lStat = statSync(join(pBaseDirectory, pFullPathToFile), {
|
|
17
|
+
throwIfNoEntry: false,
|
|
18
|
+
});
|
|
19
|
+
return lStat?.isDirectory() ?? false;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
22
|
/**
|
package/types/options.d.ts
CHANGED
|
@@ -13,7 +13,11 @@ import { IFlattenedRuleSet } from "./rule-set";
|
|
|
13
13
|
import { ModuleSystemType, OutputType } from "./shared-types";
|
|
14
14
|
|
|
15
15
|
export type ExternalModuleResolutionStrategyType = "node_modules" | "yarn-pnp";
|
|
16
|
-
export type ProgressType =
|
|
16
|
+
export type ProgressType =
|
|
17
|
+
| "cli-feedback"
|
|
18
|
+
| "performance-log"
|
|
19
|
+
| "ndjson"
|
|
20
|
+
| "none";
|
|
17
21
|
|
|
18
22
|
export interface ICruiseOptions {
|
|
19
23
|
/**
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/* eslint-disable security/detect-object-injection */
|
|
2
|
-
/* about the absence of checks whether attributes/ objects actually
|
|
3
|
-
* exist:
|
|
4
|
-
* - it saves CPU cycles to the effect of being ~30% faster than with the
|
|
5
|
-
* checks
|
|
6
|
-
* - .dependencies is a mandatory attribute (as per json schema)
|
|
7
|
-
* - .resolved is a mandatory attribute (as per json schema)
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Returns the first non-zero length path from pInitialSource to pInitialSource
|
|
12
|
-
* Returns the empty array if there is no such path
|
|
13
|
-
*
|
|
14
|
-
* @param {any} pGraph The graph in which to test this condition
|
|
15
|
-
* @param {string} pInitialSource The 'source' attribute of the node to be tested
|
|
16
|
-
* (source uniquely identifying a node)
|
|
17
|
-
* @param {string} pCurrentSource The 'source' attribute of the 'to' node to
|
|
18
|
-
* be traversed
|
|
19
|
-
* @param {string} pDependencyName The attribute name of the dependency to use.
|
|
20
|
-
* defaults to "resolved" (which is in use for
|
|
21
|
-
* modules). For folders pass "name"
|
|
22
|
-
* @param {function} pFindNodeByName Function taking a Graph and a pCurrentSource string
|
|
23
|
-
* that returns the Node in that graph going by
|
|
24
|
-
* that name. Defaults to findModuleByName (which
|
|
25
|
-
* is in use for modules). For folders pass
|
|
26
|
-
* findFolderByName
|
|
27
|
-
* @param {Set} pVisited The set of nodes visited hithereto (optional
|
|
28
|
-
* attribute - there's no need to pass it when
|
|
29
|
-
* calling it; it's used by the algorithm to
|
|
30
|
-
* determine the stop condition)
|
|
31
|
-
* @return {string[]} see description above
|
|
32
|
-
*/
|
|
33
|
-
// eslint-disable-next-line max-params
|
|
34
|
-
function getCycle(
|
|
35
|
-
pGraph,
|
|
36
|
-
pInitialSource,
|
|
37
|
-
pCurrentSource,
|
|
38
|
-
{ pDependencyName, pFindNodeByName },
|
|
39
|
-
pVisited
|
|
40
|
-
) {
|
|
41
|
-
let lVisited = pVisited || new Set();
|
|
42
|
-
const lCurrentNode = pFindNodeByName(pGraph, pCurrentSource);
|
|
43
|
-
const lDependencies = lCurrentNode.dependencies.filter(
|
|
44
|
-
(pDependency) => !lVisited.has(pDependency[pDependencyName])
|
|
45
|
-
);
|
|
46
|
-
const lMatch = lDependencies.find(
|
|
47
|
-
(pDependency) => pDependency[pDependencyName] === pInitialSource
|
|
48
|
-
);
|
|
49
|
-
if (lMatch) {
|
|
50
|
-
return [pCurrentSource, lMatch[pDependencyName]];
|
|
51
|
-
}
|
|
52
|
-
return lDependencies.reduce((pAll, pDependency) => {
|
|
53
|
-
if (!pAll.includes(pCurrentSource)) {
|
|
54
|
-
const lCycle = getCycle(
|
|
55
|
-
pGraph,
|
|
56
|
-
pInitialSource,
|
|
57
|
-
pDependency[pDependencyName],
|
|
58
|
-
{ pDependencyName, pFindNodeByName },
|
|
59
|
-
lVisited.add(pDependency[pDependencyName])
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
if (lCycle.length > 0 && !lCycle.includes(pCurrentSource)) {
|
|
63
|
-
return pAll.concat(pCurrentSource).concat(lCycle);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return pAll;
|
|
67
|
-
}, []);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
module.exports = getCycle;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
const { findModuleByName } = require("../module-utl");
|
|
2
|
-
|
|
3
|
-
function getPath(pGraph, pFrom, pTo, pVisited = new Set()) {
|
|
4
|
-
let lReturnValue = [];
|
|
5
|
-
const lFromNode = findModuleByName(pGraph, pFrom);
|
|
6
|
-
|
|
7
|
-
pVisited.add(pFrom);
|
|
8
|
-
|
|
9
|
-
if (lFromNode) {
|
|
10
|
-
const lDirectUnvisitedDependencies = lFromNode.dependencies
|
|
11
|
-
.filter((pDependency) => !pVisited.has(pDependency.resolved))
|
|
12
|
-
.map((pDependency) => pDependency.resolved);
|
|
13
|
-
if (lDirectUnvisitedDependencies.includes(pTo)) {
|
|
14
|
-
lReturnValue = [pFrom, pTo];
|
|
15
|
-
} else {
|
|
16
|
-
for (const lFrom of lDirectUnvisitedDependencies) {
|
|
17
|
-
let lCandidatePath = getPath(pGraph, lFrom, pTo, pVisited);
|
|
18
|
-
// eslint-disable-next-line max-depth
|
|
19
|
-
if (lCandidatePath.length > 0) {
|
|
20
|
-
lReturnValue = [pFrom].concat(lCandidatePath);
|
|
21
|
-
break;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return lReturnValue;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
module.exports = getPath;
|