dependency-cruiser 11.2.1 → 11.3.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/LICENSE +1 -1
- package/package.json +31 -27
- package/src/enrich/derive/folders/aggregate-to-folders.js +4 -4
- package/src/enrich/derive/folders/index.js +38 -1
- package/src/enrich/index.js +11 -3
- package/src/enrich/summarize/get-stats.js +31 -0
- package/src/enrich/summarize/index.js +25 -6
- package/src/enrich/summarize/summarize-folders.js +38 -0
- package/src/enrich/summarize/summarize-modules.js +1 -27
- package/src/enrich/summarize/summarize-options.js +13 -9
- package/src/extract/ast-extractors/swc-dependency-visitor.js +29 -5
- package/src/extract/transpile/vue-template-wrap.js +13 -1
- package/src/main/report-wrap.js +17 -3
- package/src/meta.js +1 -1
- package/src/schema/baseline-violations.schema.js +1 -1
- package/src/schema/configuration.schema.js +1 -1
- package/src/schema/cruise-result.schema.js +1 -1
- package/src/validate/index.js +25 -22
- package/src/validate/match-dependency-rule.js +3 -2
- package/src/validate/match-folder-dependency-rule.js +19 -0
- package/src/validate/match-module-rule.js +3 -2
- package/src/validate/rule-classifiers.js +21 -0
- package/types/rule-set.d.ts +12 -1
- package/types/shared-types.d.ts +2 -0
- package/src/validate/is-module-only-rule.js +0 -16
package/LICENSE
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dependency-cruiser",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.3.0",
|
|
4
4
|
"description": "Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"static analysis",
|
|
@@ -113,8 +113,11 @@
|
|
|
113
113
|
"scm:push:gitlab-mirror:tags": "git push --tags gitlab-mirror",
|
|
114
114
|
"scm:stage": "git add .",
|
|
115
115
|
"test": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\"",
|
|
116
|
+
"test:i": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\" -g \"^\\[[I]\\]\"",
|
|
117
|
+
"test:u": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\" --grep \"^\\[[U]\\]\"",
|
|
118
|
+
"test:e": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\" --grep \"^\\[[E]\\]\"",
|
|
116
119
|
"test:cover": "c8 --check-coverage --statements 99.9 --branches 99.7 --functions 100 --lines 99.9 --exclude \"{bin,configs,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}\" --reporter text-summary --reporter html --reporter json-summary npm test",
|
|
117
|
-
"test:glob": "set -f && test \"`bin/dependency-cruise.js test/extract/
|
|
120
|
+
"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)\"",
|
|
118
121
|
"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",
|
|
119
122
|
"test:yarn-pnp:pack": "npm pack",
|
|
120
123
|
"test:yarn-pnp:copy": "shx cp -r test/integration/yarn-pnp.template test/integration/yarn-pnp.testing-ground",
|
|
@@ -132,12 +135,12 @@
|
|
|
132
135
|
"version": "npm-run-all build depcruise:graph:doc scm:stage"
|
|
133
136
|
},
|
|
134
137
|
"dependencies": {
|
|
135
|
-
"acorn": "8.
|
|
138
|
+
"acorn": "8.7.0",
|
|
136
139
|
"acorn-jsx": "5.3.2",
|
|
137
140
|
"acorn-jsx-walk": "2.0.0",
|
|
138
|
-
"acorn-loose": "8.
|
|
141
|
+
"acorn-loose": "8.3.0",
|
|
139
142
|
"acorn-walk": "8.2.0",
|
|
140
|
-
"ajv": "8.
|
|
143
|
+
"ajv": "8.9.0",
|
|
141
144
|
"chalk": "^4.1.2",
|
|
142
145
|
"commander": "8.3.0",
|
|
143
146
|
"enhanced-resolve": "5.8.3",
|
|
@@ -157,14 +160,14 @@
|
|
|
157
160
|
"wrap-ansi": "^7.0.0"
|
|
158
161
|
},
|
|
159
162
|
"devDependencies": {
|
|
160
|
-
"@babel/core": "7.16.
|
|
161
|
-
"@babel/plugin-transform-modules-commonjs": "7.16.
|
|
162
|
-
"@babel/preset-typescript": "7.16.
|
|
163
|
-
"@swc/core": "1.2.
|
|
164
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
165
|
-
"@typescript-eslint/parser": "5.
|
|
166
|
-
"@vue/compiler-sfc": "3.2.
|
|
167
|
-
"c8": "7.
|
|
163
|
+
"@babel/core": "7.16.12",
|
|
164
|
+
"@babel/plugin-transform-modules-commonjs": "7.16.8",
|
|
165
|
+
"@babel/preset-typescript": "7.16.7",
|
|
166
|
+
"@swc/core": "1.2.133",
|
|
167
|
+
"@typescript-eslint/eslint-plugin": "5.10.0",
|
|
168
|
+
"@typescript-eslint/parser": "5.10.0",
|
|
169
|
+
"@vue/compiler-sfc": "3.2.28",
|
|
170
|
+
"c8": "7.11.0",
|
|
168
171
|
"chai": "4.3.4",
|
|
169
172
|
"chai-json-schema": "1.5.1",
|
|
170
173
|
"coffeescript": "2.6.1",
|
|
@@ -172,23 +175,23 @@
|
|
|
172
175
|
"eslint-config-moving-meadow": "2.0.9",
|
|
173
176
|
"eslint-config-prettier": "8.3.0",
|
|
174
177
|
"eslint-plugin-budapestian": "3.0.1",
|
|
175
|
-
"eslint-plugin-import": "2.25.
|
|
178
|
+
"eslint-plugin-import": "2.25.4",
|
|
176
179
|
"eslint-plugin-mocha": "^9.0.0",
|
|
177
180
|
"eslint-plugin-node": "11.1.0",
|
|
178
181
|
"eslint-plugin-security": "1.4.0",
|
|
179
|
-
"eslint-plugin-unicorn": "
|
|
182
|
+
"eslint-plugin-unicorn": "40.1.0",
|
|
180
183
|
"husky": "^4.3.8",
|
|
181
184
|
"intercept-stdout": "0.1.2",
|
|
182
|
-
"lint-staged": "12.
|
|
183
|
-
"mocha": "9.1.
|
|
185
|
+
"lint-staged": "12.3.0",
|
|
186
|
+
"mocha": "9.1.4",
|
|
184
187
|
"normalize-newline": "^3.0.0",
|
|
185
188
|
"npm-run-all": "4.1.5",
|
|
186
189
|
"prettier": "2.5.1",
|
|
187
190
|
"proxyquire": "2.1.3",
|
|
188
|
-
"shx": "0.3.
|
|
189
|
-
"svelte": "3.
|
|
191
|
+
"shx": "0.3.4",
|
|
192
|
+
"svelte": "3.46.2",
|
|
190
193
|
"symlink-dir": "5.0.1",
|
|
191
|
-
"typescript": "4.5.
|
|
194
|
+
"typescript": "4.5.5",
|
|
192
195
|
"upem": "^7.0.0",
|
|
193
196
|
"vue-template-compiler": "2.6.14",
|
|
194
197
|
"yarn": "1.22.17"
|
|
@@ -247,10 +250,11 @@
|
|
|
247
250
|
"src/**/*.template.js",
|
|
248
251
|
"src/cli/tools/svg-in-html-snippets/script.snippet.js",
|
|
249
252
|
"test/integration/**",
|
|
250
|
-
"test/*/
|
|
251
|
-
"test/*/*/
|
|
252
|
-
"test
|
|
253
|
-
"test
|
|
253
|
+
"test/*/__fixtures__/**",
|
|
254
|
+
"test/*/*/__fixtures__/**",
|
|
255
|
+
"test/*/*/*/__fixtures__/**",
|
|
256
|
+
"test/*/__mocks__/**",
|
|
257
|
+
"test/*/*/__mocks__/**",
|
|
254
258
|
"types/**"
|
|
255
259
|
],
|
|
256
260
|
"engines": {
|
|
@@ -283,13 +287,13 @@
|
|
|
283
287
|
"eslint --fix",
|
|
284
288
|
"prettier --write"
|
|
285
289
|
],
|
|
286
|
-
"test/**/*.{utl,spec}.{mjs,
|
|
290
|
+
"test/**/*.{utl,spec}.{mjs,cjs}": [
|
|
287
291
|
"eslint --fix",
|
|
288
292
|
"prettier --write"
|
|
289
293
|
],
|
|
290
|
-
"
|
|
294
|
+
"types/**/*.d.ts": [
|
|
291
295
|
"eslint --config types/.eslintrc.json --fix",
|
|
292
|
-
"prettier --write
|
|
296
|
+
"prettier --write"
|
|
293
297
|
]
|
|
294
298
|
}
|
|
295
299
|
}
|
|
@@ -84,8 +84,8 @@ function findFolderByName(pAllFolders, pName) {
|
|
|
84
84
|
return pAllFolders.find((pFolder) => pFolder.name === pName);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
function denormalizeInstability(pAllFolders) {
|
|
88
|
-
return
|
|
87
|
+
function denormalizeInstability(pFolder, _, pAllFolders) {
|
|
88
|
+
return {
|
|
89
89
|
...pFolder,
|
|
90
90
|
dependencies: pFolder.dependencies.map((pDependency) => {
|
|
91
91
|
const lFolder = findFolderByName(pAllFolders, pDependency.name) || {};
|
|
@@ -94,7 +94,7 @@ function denormalizeInstability(pAllFolders) {
|
|
|
94
94
|
instability: lFolder.instability >= 0 ? lFolder.instability : 0,
|
|
95
95
|
};
|
|
96
96
|
}),
|
|
97
|
-
}
|
|
97
|
+
};
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
module.exports = function aggregateToFolders(pModules) {
|
|
@@ -102,5 +102,5 @@ module.exports = function aggregateToFolders(pModules) {
|
|
|
102
102
|
pModules.filter(metricsAreCalculable).reduce(aggregateToFolder, {})
|
|
103
103
|
).map(calculateFolderMetrics);
|
|
104
104
|
|
|
105
|
-
return lFolders.map(denormalizeInstability
|
|
105
|
+
return lFolders.map(denormalizeInstability);
|
|
106
106
|
};
|
|
@@ -1,9 +1,46 @@
|
|
|
1
|
+
const validate = require("../../../validate");
|
|
1
2
|
const aggregateToFolders = require("./aggregate-to-folders");
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {*} pFolder
|
|
7
|
+
* @param {import('../../../../types/dependency-cruiser').IOptions} pOptions
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
function validateFolderDependency(pFolder, pOptions) {
|
|
11
|
+
return (pDependency) => {
|
|
12
|
+
return {
|
|
13
|
+
...pDependency,
|
|
14
|
+
...validate.folder(pOptions.ruleSet || {}, pFolder, pDependency),
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function addFolderDependencyViolations(pOptions) {
|
|
20
|
+
return (pFolder) => {
|
|
21
|
+
return {
|
|
22
|
+
...pFolder,
|
|
23
|
+
dependencies: pFolder.dependencies.map(
|
|
24
|
+
validateFolderDependency(pFolder, pOptions)
|
|
25
|
+
),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* @param {import('../../../../types/dependency-cruiser').IModule[]} pModules
|
|
33
|
+
* @param {import('../../../../types/dependency-cruiser').IOptions} pOptions
|
|
34
|
+
* @returns {any}
|
|
35
|
+
*/
|
|
3
36
|
module.exports = function deriveFolderMetrics(pModules, pOptions) {
|
|
4
37
|
let lReturnValue = {};
|
|
5
38
|
if (pOptions.metrics) {
|
|
6
|
-
lReturnValue = {
|
|
39
|
+
lReturnValue = {
|
|
40
|
+
folders: aggregateToFolders(pModules).map(
|
|
41
|
+
addFolderDependencyViolations(pOptions)
|
|
42
|
+
),
|
|
43
|
+
};
|
|
7
44
|
}
|
|
8
45
|
return lReturnValue;
|
|
9
46
|
};
|
package/src/enrich/index.js
CHANGED
|
@@ -6,11 +6,19 @@ const clearCaches = require("./clear-caches");
|
|
|
6
6
|
module.exports = function enrich(pModules, pOptions, pFileAndDirectoryArray) {
|
|
7
7
|
clearCaches();
|
|
8
8
|
const lModules = enrichModules(pModules, pOptions);
|
|
9
|
+
const lFolders = aggregateToFolders(lModules, pOptions);
|
|
9
10
|
|
|
10
11
|
clearCaches();
|
|
11
|
-
|
|
12
|
+
const lReturnValue = {
|
|
12
13
|
modules: lModules,
|
|
13
|
-
...
|
|
14
|
-
summary: summarize(
|
|
14
|
+
...lFolders,
|
|
15
|
+
summary: summarize(
|
|
16
|
+
lModules,
|
|
17
|
+
pOptions,
|
|
18
|
+
pFileAndDirectoryArray,
|
|
19
|
+
lFolders.folders
|
|
20
|
+
),
|
|
15
21
|
};
|
|
22
|
+
|
|
23
|
+
return lReturnValue;
|
|
16
24
|
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function getViolationStats(pViolations) {
|
|
2
|
+
return pViolations.reduce(
|
|
3
|
+
(pAll, pThis) => {
|
|
4
|
+
pAll[pThis.rule.severity] += 1;
|
|
5
|
+
return pAll;
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
error: 0,
|
|
9
|
+
warn: 0,
|
|
10
|
+
info: 0,
|
|
11
|
+
ignore: 0,
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function getModulesCruised(pModules) {
|
|
17
|
+
return pModules.length;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getDependenciesCruised(pModules) {
|
|
21
|
+
return pModules.reduce(
|
|
22
|
+
(pAll, pModule) => pAll + pModule.dependencies.length,
|
|
23
|
+
0
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = {
|
|
28
|
+
getViolationStats,
|
|
29
|
+
getModulesCruised,
|
|
30
|
+
getDependenciesCruised,
|
|
31
|
+
};
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
const addRuleSetUsed = require("./add-rule-set-used");
|
|
2
2
|
const summarizeModules = require("./summarize-modules");
|
|
3
|
+
const summarizeFolders = require("./summarize-folders");
|
|
3
4
|
const summarizeOptions = require("./summarize-options");
|
|
5
|
+
const {
|
|
6
|
+
getViolationStats,
|
|
7
|
+
getModulesCruised,
|
|
8
|
+
getDependenciesCruised,
|
|
9
|
+
} = require("./get-stats");
|
|
4
10
|
|
|
5
11
|
/**
|
|
6
12
|
*
|
|
@@ -8,17 +14,30 @@ const summarizeOptions = require("./summarize-options");
|
|
|
8
14
|
* cruised modules that have been enriched with mandatory attributes &
|
|
9
15
|
* have been validated against rules as passed in the options
|
|
10
16
|
* @param {import("../../../types/options").ICruiseOptions} pOptions -
|
|
11
|
-
*
|
|
12
17
|
* @param {string[]} pFileDirectoryArray -
|
|
13
18
|
* the files/ directories originally passed to be cruised
|
|
19
|
+
* @param {import("../../../types/dependency-cruiser").IFolder[]} pFolders -
|
|
20
|
+
* the pModules collapsed to folders, with their own metrics & deps
|
|
14
21
|
*
|
|
15
22
|
* @returns {import("../../../types/cruise-result").ISummary} -
|
|
16
23
|
* a summary of the found modules, dependencies and any violations
|
|
17
24
|
*/
|
|
18
|
-
module.exports = function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
module.exports = function summarize(
|
|
26
|
+
pModules,
|
|
27
|
+
pOptions,
|
|
28
|
+
pFileDirectoryArray,
|
|
29
|
+
pFolders
|
|
30
|
+
) {
|
|
31
|
+
const lViolations = summarizeModules(pModules, pOptions.ruleSet).concat(
|
|
32
|
+
summarizeFolders(pFolders || [], pOptions.ruleSet)
|
|
23
33
|
);
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
violations: lViolations,
|
|
37
|
+
...getViolationStats(lViolations),
|
|
38
|
+
totalCruised: getModulesCruised(pModules),
|
|
39
|
+
totalDependenciesCruised: getDependenciesCruised(pModules),
|
|
40
|
+
...summarizeOptions(pFileDirectoryArray, pOptions),
|
|
41
|
+
...(pOptions.ruleSet ? { ruleSetUsed: addRuleSetUsed(pOptions) } : {}),
|
|
42
|
+
};
|
|
24
43
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const _has = require("lodash/has");
|
|
2
|
+
const { findRuleByName } = require("../../graph-utl/rule-set");
|
|
3
|
+
|
|
4
|
+
function classifyViolation(pRule, pRuleSet) {
|
|
5
|
+
if (_has(findRuleByName(pRuleSet, pRule.name), "to.moreUnstable")) {
|
|
6
|
+
return "instability";
|
|
7
|
+
}
|
|
8
|
+
return "folder";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function getViolations(pFolder, pRuleSet) {
|
|
12
|
+
return pFolder.dependencies
|
|
13
|
+
.filter((pDependency) => !pDependency.valid)
|
|
14
|
+
.flatMap((pDependency) =>
|
|
15
|
+
pDependency.rules.map((pRule) => {
|
|
16
|
+
const lViolationType = classifyViolation(pRule, pRuleSet);
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
type: lViolationType,
|
|
20
|
+
from: pFolder.name,
|
|
21
|
+
to: pDependency.name,
|
|
22
|
+
rule: pRule,
|
|
23
|
+
...(lViolationType === "instability"
|
|
24
|
+
? {
|
|
25
|
+
metrics: {
|
|
26
|
+
from: { instability: pFolder.instability },
|
|
27
|
+
to: { instability: pDependency.instability },
|
|
28
|
+
},
|
|
29
|
+
}
|
|
30
|
+
: {}),
|
|
31
|
+
};
|
|
32
|
+
})
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = function summarizeFolders(pFolders, pRuleSet) {
|
|
37
|
+
return pFolders.flatMap((pFolder) => getViolations(pFolder, pRuleSet));
|
|
38
|
+
};
|
|
@@ -15,20 +15,6 @@ function cutNonTransgressions(pModule) {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
function extractMetaData(pViolations) {
|
|
19
|
-
return pViolations.reduce(
|
|
20
|
-
(pAll, pThis) => {
|
|
21
|
-
pAll[pThis.rule.severity] += 1;
|
|
22
|
-
return pAll;
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
error: 0,
|
|
26
|
-
warn: 0,
|
|
27
|
-
info: 0,
|
|
28
|
-
ignore: 0,
|
|
29
|
-
}
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
18
|
function toDependencyViolationSummary(pRule, pModule, pDependency, pRuleSet) {
|
|
33
19
|
let lReturnValue = {
|
|
34
20
|
type: "dependency",
|
|
@@ -149,22 +135,10 @@ function extractModuleViolations(pModules, pRuleSet) {
|
|
|
149
135
|
}
|
|
150
136
|
|
|
151
137
|
module.exports = function summarizeModules(pModules, pRuleSet) {
|
|
152
|
-
|
|
138
|
+
return _uniqWith(
|
|
153
139
|
extractDependencyViolations(pModules, pRuleSet)
|
|
154
140
|
.concat(extractModuleViolations(pModules, pRuleSet))
|
|
155
141
|
.sort(compare.violations),
|
|
156
142
|
isSameViolation
|
|
157
143
|
);
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
violations: lViolations,
|
|
161
|
-
...extractMetaData(lViolations),
|
|
162
|
-
totalCruised: pModules.length,
|
|
163
|
-
totalDependenciesCruised: pModules.reduce(
|
|
164
|
-
(pAll, pModule) => pAll + pModule.dependencies.length,
|
|
165
|
-
0
|
|
166
|
-
),
|
|
167
|
-
};
|
|
168
144
|
};
|
|
169
|
-
|
|
170
|
-
module.exports.extractModuleViolations = extractModuleViolations;
|
|
@@ -29,23 +29,27 @@ const SHAREABLE_OPTIONS = [
|
|
|
29
29
|
|
|
30
30
|
function makeOptionsPresentable(pOptions) {
|
|
31
31
|
return SHAREABLE_OPTIONS.filter(
|
|
32
|
-
(
|
|
32
|
+
(pShareableOptionKey) =>
|
|
33
|
+
_has(pOptions, pShareableOptionKey) && pOptions[pShareableOptionKey] !== 0
|
|
33
34
|
)
|
|
34
35
|
.filter(
|
|
35
|
-
(
|
|
36
|
-
|
|
36
|
+
(pShareableOptionKey) =>
|
|
37
|
+
pShareableOptionKey !== "doNotFollow" ||
|
|
37
38
|
Object.keys(pOptions.doNotFollow).length > 0
|
|
38
39
|
)
|
|
39
40
|
.filter(
|
|
40
|
-
(
|
|
41
|
-
|
|
41
|
+
(pShareableOptionKey) =>
|
|
42
|
+
pShareableOptionKey !== "exclude" ||
|
|
43
|
+
Object.keys(pOptions.exclude).length > 0
|
|
42
44
|
)
|
|
43
45
|
.filter(
|
|
44
|
-
(
|
|
45
|
-
|
|
46
|
+
(pShareableOptionKey) =>
|
|
47
|
+
pShareableOptionKey !== "knownViolations" ||
|
|
48
|
+
pOptions.knownViolations.length > 0
|
|
46
49
|
)
|
|
47
|
-
.reduce((pAll,
|
|
48
|
-
|
|
50
|
+
.reduce((pAll, pShareableOptionKey) => {
|
|
51
|
+
// console.error(pOption);
|
|
52
|
+
pAll[pShareableOptionKey] = pOptions[pShareableOptionKey];
|
|
49
53
|
return pAll;
|
|
50
54
|
}, {});
|
|
51
55
|
}
|
|
@@ -77,11 +77,35 @@ function extractExoticMemberCallExpression(pNode, pExoticRequireStrings) {
|
|
|
77
77
|
return lReturnValue;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
function isImportCallExpression(pNode) {
|
|
81
|
+
/*
|
|
82
|
+
somewhere between swc 1.2.123 and 1.2.133 the swc AST started to
|
|
83
|
+
represent import call expressions with .callee.type === "Import"
|
|
84
|
+
instead of .callee.value === "import". Keeping both detection
|
|
85
|
+
methods in here for backwards compatiblity
|
|
86
|
+
*/
|
|
87
|
+
return pNode.callee.value === "import" || pNode.callee.type === "Import";
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function isNonExoticallyRequiredExpression(pNode) {
|
|
91
|
+
return pNode.callee.value === "require" || isImportCallExpression(pNode);
|
|
92
|
+
}
|
|
93
|
+
|
|
80
94
|
function isInterestingCallExpression(pExoticRequireStrings, pNode) {
|
|
81
|
-
|
|
82
|
-
.
|
|
83
|
-
.
|
|
95
|
+
/*
|
|
96
|
+
somewhere between swc 1.2.123 and 1.2.133 the swc AST started to
|
|
97
|
+
represent import call expressions with .callee.type === "Import"
|
|
98
|
+
instead of .callee.value === "import". Keeping both detection
|
|
99
|
+
methods in here for backwards compatiblity
|
|
100
|
+
*/
|
|
101
|
+
return (
|
|
102
|
+
pNode.callee.type === "Import" ||
|
|
103
|
+
["require", "import"]
|
|
104
|
+
.concat(pExoticRequireStrings.filter((pString) => !pString.includes(".")))
|
|
105
|
+
.includes(pNode.callee.value)
|
|
106
|
+
);
|
|
84
107
|
}
|
|
108
|
+
|
|
85
109
|
if (VisitorModule) {
|
|
86
110
|
module.exports = class SwcDependencyVisitor extends Visitor {
|
|
87
111
|
constructor(pExoticRequireStrings) {
|
|
@@ -159,11 +183,11 @@ if (VisitorModule) {
|
|
|
159
183
|
this.lResult.push({
|
|
160
184
|
module: pryStringsFromArguments(pNode.arguments),
|
|
161
185
|
|
|
162
|
-
...(pNode
|
|
186
|
+
...(isImportCallExpression(pNode)
|
|
163
187
|
? { moduleSystem: "es6", dynamic: true }
|
|
164
188
|
: { moduleSystem: "cjs", dynamic: false }),
|
|
165
189
|
|
|
166
|
-
...(
|
|
190
|
+
...(isNonExoticallyRequiredExpression(pNode)
|
|
167
191
|
? { exoticallyRequired: false }
|
|
168
192
|
: { exoticallyRequired: true, exoticRequire: pNode.callee.value }),
|
|
169
193
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { EOL } = require("os");
|
|
1
2
|
const isEmpty = require("lodash/isEmpty");
|
|
2
3
|
const _get = require("lodash/get");
|
|
3
4
|
const tryRequire = require("semver-try-require");
|
|
@@ -40,7 +41,18 @@ function vue3Transpile(pSource) {
|
|
|
40
41
|
return "";
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
const scriptContent = _get(parsedComponent, "descriptor.script.content", "");
|
|
45
|
+
const scriptSetupContent = _get(
|
|
46
|
+
parsedComponent,
|
|
47
|
+
"descriptor.scriptSetup.content",
|
|
48
|
+
""
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
if (scriptContent && scriptSetupContent) {
|
|
52
|
+
return scriptContent + EOL + scriptSetupContent;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return scriptContent || scriptSetupContent;
|
|
44
56
|
}
|
|
45
57
|
|
|
46
58
|
function vue2Transpile(pSource) {
|
package/src/main/report-wrap.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
const _get = require("lodash/get");
|
|
2
2
|
const _has = require("lodash/has");
|
|
3
3
|
const filterbank = require("../graph-utl/filterbank");
|
|
4
|
-
const
|
|
4
|
+
const summarize = require("../enrich/summarize");
|
|
5
5
|
const consolidateToPattern = require("../graph-utl/consolidate-to-pattern");
|
|
6
6
|
const compare = require("../graph-utl/compare");
|
|
7
7
|
const stripSelfTransitions = require("../graph-utl/strip-self-transitions");
|
|
8
8
|
const report = require("../report");
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param {import('../../types/dependency-cruiser').ICruiseResult} pResult
|
|
13
|
+
* @param {import('../../types/dependency-cruiser').IFormatOptions} pFormatOptions
|
|
14
|
+
* @returns {import('../../types/dependency-cruiser').ICruiseResult}
|
|
15
|
+
*/
|
|
10
16
|
function reSummarizeResults(pResult, pFormatOptions) {
|
|
11
17
|
let lModules = filterbank.applyFilters(pResult.modules, pFormatOptions);
|
|
12
18
|
|
|
@@ -15,12 +21,20 @@ function reSummarizeResults(pResult, pFormatOptions) {
|
|
|
15
21
|
.sort(compare.modules)
|
|
16
22
|
.map(stripSelfTransitions);
|
|
17
23
|
}
|
|
18
|
-
|
|
19
24
|
return {
|
|
20
25
|
...pResult,
|
|
21
26
|
summary: {
|
|
22
27
|
...pResult.summary,
|
|
23
|
-
...
|
|
28
|
+
...summarize(
|
|
29
|
+
lModules,
|
|
30
|
+
{
|
|
31
|
+
...pResult.summary.optionsUsed,
|
|
32
|
+
...pFormatOptions,
|
|
33
|
+
},
|
|
34
|
+
(pResult.summary.optionsUsed.args || "").split(" "),
|
|
35
|
+
// TODO: apply filters to the folders too
|
|
36
|
+
pResult.folders
|
|
37
|
+
),
|
|
24
38
|
},
|
|
25
39
|
modules: lModules,
|
|
26
40
|
};
|
package/src/meta.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* generated - don't edit */
|
|
2
|
-
module.exports={"title":"dependency-cruiser baseline ('known errors') format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/baseline-violations.schema.json","$ref":"#/definitions/ViolationsType","definitions":{"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"}}}}}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability"]}}}
|
|
2
|
+
module.exports={"title":"dependency-cruiser baseline ('known errors') format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/baseline-violations.schema.json","$ref":"#/definitions/ViolationsType","definitions":{"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"}}}}}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]}}}
|
|
@@ -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"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"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"},"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"},"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"},"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"},"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"},"viaNot":{"$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"}]},"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"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"}}},"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"}}},"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"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"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"}}},"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"}}},"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"}}}}}}},"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"]},"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"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"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"},"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"},"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"},"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"},"viaNot":{"$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"}]},"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"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"}}},"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"}}},"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"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"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"}}},"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"}}},"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"}}}}}}},"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"]},"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"}},"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"},"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"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"}}}},"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"}}}}}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability"]},"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"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"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"},"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"},"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"},"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"},"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"},"viaNot":{"$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"},"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"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"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"]},{"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"}}},"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"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"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"}}},"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"}}}}}
|
|
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"}},"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"},"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"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"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"}}}}}}},"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"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"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"},"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"},"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"},"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"},"viaNot":{"$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"},"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"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"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"]},{"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"}}},"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"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"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"}}},"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"}}}}}
|
package/src/validate/index.js
CHANGED
|
@@ -2,6 +2,7 @@ const _has = require("lodash/has");
|
|
|
2
2
|
const matchModuleRule = require("./match-module-rule");
|
|
3
3
|
const matchDependencyRule = require("./match-dependency-rule");
|
|
4
4
|
const violatesRequiredRule = require("./violates-required-rule");
|
|
5
|
+
const matchFolderRule = require("./match-folder-dependency-rule");
|
|
5
6
|
|
|
6
7
|
function compareSeverity(pFirst, pSecond) {
|
|
7
8
|
const lSeverity2Int = {
|
|
@@ -81,31 +82,33 @@ function validateAgainstRules(pRuleSet, pFrom, pTo, pMatchModule) {
|
|
|
81
82
|
return lReturnValue;
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
/**
|
|
85
|
-
* If pValidate equals true, validates the pFrom and pTo
|
|
86
|
-
* dependency pair against the given ruleset pRuleSet
|
|
87
|
-
*
|
|
88
|
-
* @param {import("../../types/rule-set").IFlattenedRuleSet} pRuleSet
|
|
89
|
-
* a ruleset (adhering to [the ruleset schema](jsonschema.json))
|
|
90
|
-
* @param {import("../../types/cruise-result").IModule} pFrom
|
|
91
|
-
* The from part of the dependency
|
|
92
|
-
* @param {import("../../types/cruise-result").IModule} pTo
|
|
93
|
-
* The 'to' part of the dependency
|
|
94
|
-
* @return {any} an object with as attributes:
|
|
95
|
-
* - valid: (boolean) true if the relation
|
|
96
|
-
* between pTo and pFalse is valid (as far as the
|
|
97
|
-
* given ruleset is concerend). false in all other
|
|
98
|
-
* cases.
|
|
99
|
-
* - rule (only when the relation between pFrom and
|
|
100
|
-
* pTo was false):
|
|
101
|
-
* - name: the name (from the ruleset) of the
|
|
102
|
-
* violated rule
|
|
103
|
-
* - severity: the severity of that rule - as per
|
|
104
|
-
* the ruleset
|
|
105
|
-
*/
|
|
106
85
|
module.exports = {
|
|
107
86
|
module: (pRuleSet, pModule) =>
|
|
108
87
|
validateAgainstRules(pRuleSet, pModule, {}, matchModuleRule),
|
|
88
|
+
/**
|
|
89
|
+
* Validates the pFrom and pTo dependency pair against the given
|
|
90
|
+
* ruleset pRuleSet
|
|
91
|
+
*
|
|
92
|
+
* @param {import("../../types/rule-set").IFlattenedRuleSet} pRuleSet
|
|
93
|
+
* a ruleset (adhering to [the ruleset schema](jsonschema.json))
|
|
94
|
+
* @param {import("../../types/cruise-result").IModule} pFrom
|
|
95
|
+
* The from part of the dependency
|
|
96
|
+
* @param {import("../../types/cruise-result").IModule} pTo
|
|
97
|
+
* The 'to' part of the dependency
|
|
98
|
+
* @return {any} an object with as attributes:
|
|
99
|
+
* - valid: (boolean) true if the relation
|
|
100
|
+
* between pTo and pFalse is valid (as far as the
|
|
101
|
+
* given ruleset is concerend). false in all other
|
|
102
|
+
* cases.
|
|
103
|
+
* - rule (only when the relation between pFrom and
|
|
104
|
+
* pTo was false):
|
|
105
|
+
* - name: the name (from the ruleset) of the
|
|
106
|
+
* violated rule
|
|
107
|
+
* - severity: the severity of that rule - as per
|
|
108
|
+
* the ruleset
|
|
109
|
+
*/
|
|
109
110
|
dependency: (pRuleSet, pFrom, pTo) =>
|
|
110
111
|
validateAgainstRules(pRuleSet, pFrom, pTo, matchDependencyRule),
|
|
112
|
+
folder: (pRuleSet, pFromFolder, pToFolder) =>
|
|
113
|
+
validateAgainstRules(pRuleSet, pFromFolder, pToFolder, matchFolderRule),
|
|
111
114
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const { extractGroups } = require("../utl/regex-util");
|
|
2
|
-
const isModuleOnlyRule = require("./
|
|
2
|
+
const { isModuleOnlyRule, isFolderScope } = require("./rule-classifiers");
|
|
3
3
|
const matchers = require("./matchers");
|
|
4
4
|
|
|
5
5
|
function match(pFrom, pTo) {
|
|
@@ -40,7 +40,8 @@ function match(pFrom, pTo) {
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
const isInteresting = (pRule) =>
|
|
43
|
+
const isInteresting = (pRule) =>
|
|
44
|
+
!isModuleOnlyRule(pRule) && !isFolderScope(pRule);
|
|
44
45
|
|
|
45
46
|
module.exports = {
|
|
46
47
|
match,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { isModuleOnlyRule, isFolderScope } = require("./rule-classifiers");
|
|
2
|
+
const matchers = require("./matchers");
|
|
3
|
+
|
|
4
|
+
function match(pFromFolder, pToFolder) {
|
|
5
|
+
return (pRule) =>
|
|
6
|
+
// TODO: add path rules - they need to be frippled from the ones
|
|
7
|
+
// already in place for modules
|
|
8
|
+
// TODO: same for cycles - but these will additionally have to be
|
|
9
|
+
// yognated with an adapted cycle detection for folders
|
|
10
|
+
matchers.toIsMoreUnstable(pRule, pFromFolder, pToFolder);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const isInteresting = (pRule) =>
|
|
14
|
+
isFolderScope(pRule) && !isModuleOnlyRule(pRule);
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
match,
|
|
18
|
+
isInteresting,
|
|
19
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const _has = require("lodash/has");
|
|
2
2
|
const { extractGroups } = require("../utl/regex-util");
|
|
3
|
-
const isModuleOnlyRule = require("./
|
|
3
|
+
const { isModuleOnlyRule, isFolderScope } = require("./rule-classifiers");
|
|
4
4
|
const matchers = require("./matchers");
|
|
5
5
|
|
|
6
6
|
function matchesOrphanRule(pRule, pModule) {
|
|
@@ -92,7 +92,8 @@ function match(pModule) {
|
|
|
92
92
|
);
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
|
-
const isInteresting = (pRule) =>
|
|
95
|
+
const isInteresting = (pRule) =>
|
|
96
|
+
isModuleOnlyRule(pRule) && !isFolderScope(pRule);
|
|
96
97
|
|
|
97
98
|
module.exports = {
|
|
98
99
|
matchesOrphanRule,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const has = require("lodash/has");
|
|
2
|
+
const get = require("lodash/get");
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @param {any} pRule a dependency-cruiser rule
|
|
6
|
+
* @returns {boolean} whether or not the rule is 'module only'
|
|
7
|
+
*/
|
|
8
|
+
function isModuleOnlyRule(pRule) {
|
|
9
|
+
return (
|
|
10
|
+
has(pRule.from || {}, "orphan") ||
|
|
11
|
+
// note: the to might become optional for required rules
|
|
12
|
+
has(pRule.to, "reachable") ||
|
|
13
|
+
has(pRule, "module")
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function isFolderScope(pRule) {
|
|
18
|
+
return get(pRule, "scope", "module") === "folder";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
module.exports = { isModuleOnlyRule, isFolderScope };
|
package/types/rule-set.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SeverityType } from "./shared-types";
|
|
1
|
+
import { SeverityType, RuleScopeType } from "./shared-types";
|
|
2
2
|
import {
|
|
3
3
|
IBaseRestrictionType,
|
|
4
4
|
IFromRestriction,
|
|
@@ -40,6 +40,17 @@ export interface IRegularForbiddenRuleType extends IBaseRuleType {
|
|
|
40
40
|
* rule. Leave it empty if you want any module to be matched.
|
|
41
41
|
*/
|
|
42
42
|
to: IToRestriction;
|
|
43
|
+
/**
|
|
44
|
+
* What to apply the rule to - modules (the default) or folders. Switching
|
|
45
|
+
* the scope to 'folder' can be useful in rules where this makes a difference
|
|
46
|
+
* like those regarding circular dependencies or instability. Two things
|
|
47
|
+
* to note when you decide to use 'folder' level scope: (1) the 'scope' attribute
|
|
48
|
+
* is experimental - the way to indicate the scope of a rule can change
|
|
49
|
+
* over time without dependency-cruiser undergoing a major bump. (2) Only
|
|
50
|
+
* the to.moreUnstable attribute works at the moment. Other attributes will
|
|
51
|
+
* follow suit in releases after 11.3.0."
|
|
52
|
+
*/
|
|
53
|
+
scope?: RuleScopeType;
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
export interface IReachabilityForbiddenRuleType extends IBaseRuleType {
|
package/types/shared-types.d.ts
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const _has = require("lodash/has");
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @param {any} pRule a dependency-cruiser rule
|
|
5
|
-
* @returns {boolean} whether or not the rule is 'module only'
|
|
6
|
-
*/
|
|
7
|
-
function isModuleOnlyRule(pRule) {
|
|
8
|
-
return (
|
|
9
|
-
_has(pRule.from || {}, "orphan") ||
|
|
10
|
-
// note: the to might become optional for required rules
|
|
11
|
-
_has(pRule.to, "reachable") ||
|
|
12
|
-
_has(pRule, "module")
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
module.exports = isModuleOnlyRule;
|