dependency-cruiser 12.3.0 → 12.4.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 +14 -13
- package/src/cache/cache.js +32 -14
- package/src/cache/{revision-data.js → git-revision-data.js} +7 -28
- package/src/cache/options-compatible.js +17 -5
- package/src/cache/utl.js +17 -10
- package/src/cli/index.js +7 -3
- package/src/cli/init-config/find-extensions.js +8 -70
- package/src/cli/init-config/normalize-init-options.js +4 -1
- package/src/cli/listeners/{cli-feedback/index.js → cli-feedback.js} +1 -1
- package/src/cli/normalize-cli-options.js +0 -15
- package/src/main/index.js +18 -21
- package/src/main/options/normalize.js +33 -0
- 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 +79 -0
- package/types/cache-options.d.ts +22 -0
- package/types/options.d.ts +23 -10
- package/types/strict-options.d.ts +2 -0
package/LICENSE
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dependency-cruiser",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.4.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}\" --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.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",
|
|
@@ -147,18 +147,19 @@
|
|
|
147
147
|
"acorn-jsx-walk": "2.0.0",
|
|
148
148
|
"acorn-loose": "8.3.0",
|
|
149
149
|
"acorn-walk": "8.2.0",
|
|
150
|
-
"ajv": "8.
|
|
150
|
+
"ajv": "8.12.0",
|
|
151
151
|
"chalk": "^4.1.2",
|
|
152
|
-
"commander": "9.
|
|
152
|
+
"commander": "9.5.0",
|
|
153
153
|
"enhanced-resolve": "5.12.0",
|
|
154
154
|
"figures": "^3.2.0",
|
|
155
155
|
"get-stream": "^6.0.1",
|
|
156
156
|
"glob": "7.2.0",
|
|
157
157
|
"handlebars": "4.7.7",
|
|
158
|
+
"ignore": "5.2.4",
|
|
158
159
|
"indent-string": "^4.0.0",
|
|
159
160
|
"interpret": "^3.1.0",
|
|
160
161
|
"is-installed-globally": "0.4.0",
|
|
161
|
-
"json5": "2.2.
|
|
162
|
+
"json5": "2.2.3",
|
|
162
163
|
"lodash": "4.17.21",
|
|
163
164
|
"prompts": "2.4.2",
|
|
164
165
|
"rechoir": "^0.8.0",
|
|
@@ -171,23 +172,23 @@
|
|
|
171
172
|
"wrap-ansi": "^7.0.0"
|
|
172
173
|
},
|
|
173
174
|
"devDependencies": {
|
|
174
|
-
"@babel/core": "7.20.
|
|
175
|
+
"@babel/core": "7.20.12",
|
|
175
176
|
"@babel/plugin-transform-modules-commonjs": "7.20.11",
|
|
176
177
|
"@babel/preset-typescript": "7.18.6",
|
|
177
|
-
"@swc/core": "1.3.
|
|
178
|
+
"@swc/core": "1.3.25",
|
|
178
179
|
"@types/lodash": "4.14.191",
|
|
179
180
|
"@types/node": "18.11.18",
|
|
180
181
|
"@types/prompts": "2.4.2",
|
|
181
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
182
|
-
"@typescript-eslint/parser": "5.
|
|
182
|
+
"@typescript-eslint/eslint-plugin": "5.48.0",
|
|
183
|
+
"@typescript-eslint/parser": "5.48.0",
|
|
183
184
|
"@vue/compiler-sfc": "3.2.45",
|
|
184
185
|
"c8": "7.12.0",
|
|
185
186
|
"chai": "4.3.7",
|
|
186
187
|
"chai-json-schema": "1.5.1",
|
|
187
188
|
"coffeescript": "2.7.0",
|
|
188
|
-
"eslint": "8.
|
|
189
|
+
"eslint": "8.31.0",
|
|
189
190
|
"eslint-config-moving-meadow": "4.0.2",
|
|
190
|
-
"eslint-config-prettier": "8.
|
|
191
|
+
"eslint-config-prettier": "8.6.0",
|
|
191
192
|
"eslint-plugin-budapestian": "5.0.1",
|
|
192
193
|
"eslint-plugin-eslint-comments": "3.2.0",
|
|
193
194
|
"eslint-plugin-import": "2.26.0",
|
|
@@ -195,13 +196,13 @@
|
|
|
195
196
|
"eslint-plugin-node": "11.1.0",
|
|
196
197
|
"eslint-plugin-security": "1.5.0",
|
|
197
198
|
"eslint-plugin-unicorn": "^45.0.0",
|
|
198
|
-
"husky": "8.0.
|
|
199
|
+
"husky": "8.0.3",
|
|
199
200
|
"intercept-stdout": "0.1.2",
|
|
200
201
|
"lint-staged": "13.1.0",
|
|
201
202
|
"mocha": "10.2.0",
|
|
202
203
|
"normalize-newline": "^3.0.0",
|
|
203
204
|
"npm-run-all": "4.1.5",
|
|
204
|
-
"prettier": "2.8.
|
|
205
|
+
"prettier": "2.8.2",
|
|
205
206
|
"proxyquire": "2.1.3",
|
|
206
207
|
"shx": "0.3.4",
|
|
207
208
|
"svelte": "3.55.0",
|
package/src/cache/cache.js
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
const { readFileSync, mkdirSync, writeFileSync } = require("fs");
|
|
2
2
|
const { join } = require("path");
|
|
3
|
+
const meta = require("../extract/transpile/meta");
|
|
3
4
|
const { optionsAreCompatible } = require("./options-compatible");
|
|
4
|
-
const { revisionDataEqual } = require("./revision-data");
|
|
5
|
+
const { getRevisionData, revisionDataEqual } = require("./git-revision-data");
|
|
5
6
|
|
|
6
7
|
const CACHE_FILE_NAME = "cache.json";
|
|
8
|
+
let gRevisionData = null;
|
|
9
|
+
|
|
7
10
|
/**
|
|
8
|
-
*
|
|
9
11
|
* @param {string} pCacheFolder
|
|
10
|
-
* @param {import("
|
|
12
|
+
* @param {import("../..").ICruiseResult} pCruiseResult
|
|
13
|
+
* @param {import("../..").IRevisionData=} pRevisionData
|
|
11
14
|
*/
|
|
12
|
-
function writeCache(pCacheFolder, pCruiseResult) {
|
|
15
|
+
function writeCache(pCacheFolder, pCruiseResult, pRevisionData) {
|
|
16
|
+
const lRevisionData = pRevisionData ?? gRevisionData;
|
|
17
|
+
|
|
13
18
|
mkdirSync(pCacheFolder, { recursive: true });
|
|
14
19
|
writeFileSync(
|
|
15
20
|
join(pCacheFolder, CACHE_FILE_NAME),
|
|
16
|
-
JSON.stringify(
|
|
21
|
+
JSON.stringify(
|
|
22
|
+
lRevisionData
|
|
23
|
+
? {
|
|
24
|
+
...pCruiseResult,
|
|
25
|
+
revisionData: lRevisionData,
|
|
26
|
+
}
|
|
27
|
+
: pCruiseResult
|
|
28
|
+
),
|
|
17
29
|
"utf8"
|
|
18
30
|
);
|
|
19
31
|
}
|
|
20
32
|
|
|
21
33
|
/**
|
|
22
|
-
*
|
|
23
34
|
* @param {string} pCacheFolder
|
|
24
35
|
* @returns {import("../..").ICruiseResult}
|
|
25
36
|
*/
|
|
@@ -34,23 +45,30 @@ function readCache(pCacheFolder) {
|
|
|
34
45
|
}
|
|
35
46
|
|
|
36
47
|
/**
|
|
37
|
-
*
|
|
38
48
|
* @param {import("../../types/strict-options").IStrictCruiseOptions} pOptions
|
|
39
|
-
* @param {import("../..").
|
|
49
|
+
* @param {import("../..").ICruiseResult} pCachedCruiseResult
|
|
50
|
+
* @param {import("../..").IRevisionData=} pRevisionData
|
|
40
51
|
* @returns {boolean}
|
|
41
52
|
*/
|
|
42
|
-
function canServeFromCache(pOptions, pRevisionData) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
function canServeFromCache(pOptions, pCachedCruiseResult, pRevisionData) {
|
|
54
|
+
gRevisionData =
|
|
55
|
+
pRevisionData ??
|
|
56
|
+
getRevisionData(
|
|
57
|
+
new Set(meta.scannableExtensions.concat(pOptions.extraExtensionsToScan))
|
|
58
|
+
);
|
|
46
59
|
return (
|
|
47
|
-
revisionDataEqual(
|
|
48
|
-
optionsAreCompatible(
|
|
60
|
+
revisionDataEqual(pCachedCruiseResult.revisionData, gRevisionData) &&
|
|
61
|
+
optionsAreCompatible(pCachedCruiseResult.summary.optionsUsed, pOptions)
|
|
49
62
|
);
|
|
50
63
|
}
|
|
51
64
|
|
|
65
|
+
function clearCache() {
|
|
66
|
+
gRevisionData = null;
|
|
67
|
+
}
|
|
68
|
+
|
|
52
69
|
module.exports = {
|
|
53
70
|
writeCache,
|
|
54
71
|
readCache,
|
|
55
72
|
canServeFromCache,
|
|
73
|
+
clearCache,
|
|
56
74
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
const { createHash } = require("crypto");
|
|
2
|
-
const { readFileSync } = require("fs");
|
|
3
1
|
const { extname } = require("path");
|
|
2
|
+
const { isDeepStrictEqual } = require("util");
|
|
4
3
|
const { getSHASync, listSync } = require("watskeburt");
|
|
5
|
-
const {
|
|
4
|
+
const { getFileHash } = require("./utl");
|
|
6
5
|
|
|
7
6
|
// skipping: "pairing broken", "unmodified", "unmerged", "type changed"
|
|
8
7
|
const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
|
|
@@ -36,29 +35,9 @@ function isInterestingChangeType(pInterestingChangeTypes) {
|
|
|
36
35
|
return (pChange) => pInterestingChangeTypes.has(pChange.changeType);
|
|
37
36
|
}
|
|
38
37
|
|
|
39
|
-
/**
|
|
40
|
-
* @param {string} pString
|
|
41
|
-
* @returns {string}
|
|
42
|
-
*/
|
|
43
|
-
function hash(pString) {
|
|
44
|
-
return createHash("sha1").update(pString).digest("base64");
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @param {import("fs").PathOrFileDescriptor} pFileName
|
|
49
|
-
* @returns {string}
|
|
50
|
-
*/
|
|
51
|
-
function getFileHash(pFileName) {
|
|
52
|
-
try {
|
|
53
|
-
return hash(readFileSync(pFileName, "utf8"));
|
|
54
|
-
} catch (pError) {
|
|
55
|
-
return "file not found";
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
38
|
/**
|
|
60
39
|
* @param {import("watskeburt").IChange} pChange
|
|
61
|
-
* @param {import("
|
|
40
|
+
* @param {import("../../types/dependency-cruiser").IRevisionChange}
|
|
62
41
|
*/
|
|
63
42
|
function addChecksum(pChange) {
|
|
64
43
|
return {
|
|
@@ -75,7 +54,7 @@ function addChecksum(pChange) {
|
|
|
75
54
|
* @param {() => string} pOptions.shaRetrievalFn
|
|
76
55
|
* @param {(pString:string) => Array<import("watskeburt").IChange>} pOptions.diffListFn
|
|
77
56
|
* @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checkSumFn
|
|
78
|
-
* @returns {import("
|
|
57
|
+
* @returns {import("../../types/dependency-cruiser").IRevisionData}
|
|
79
58
|
*/
|
|
80
59
|
function getRevisionData(
|
|
81
60
|
pExtensions,
|
|
@@ -108,8 +87,8 @@ function getRevisionData(
|
|
|
108
87
|
}
|
|
109
88
|
|
|
110
89
|
/**
|
|
111
|
-
* @param {import("
|
|
112
|
-
* @param {import("
|
|
90
|
+
* @param {import("../../types/dependency-cruiser").IRevisionData} pExistingRevisionData
|
|
91
|
+
* @param {import("../../types/dependency-cruiser").IRevisionData} pNewRevisionData
|
|
113
92
|
* @returns {boolean}
|
|
114
93
|
*/
|
|
115
94
|
function revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
|
|
@@ -117,7 +96,7 @@ function revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
|
|
|
117
96
|
Boolean(pExistingRevisionData) &&
|
|
118
97
|
Boolean(pNewRevisionData) &&
|
|
119
98
|
pExistingRevisionData.SHA1 === pNewRevisionData.SHA1 &&
|
|
120
|
-
|
|
99
|
+
isDeepStrictEqual(pExistingRevisionData.changes, pNewRevisionData.changes)
|
|
121
100
|
);
|
|
122
101
|
}
|
|
123
102
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { isDeepStrictEqual } = require("util");
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
# command line options
|
|
@@ -55,11 +55,11 @@ const { objectsAreEqual } = require("./utl");
|
|
|
55
55
|
|
|
56
56
|
function includeOnlyIsCompatible(pExistingFilter, pNewFilter) {
|
|
57
57
|
return (
|
|
58
|
-
!pExistingFilter ||
|
|
58
|
+
!pExistingFilter || isDeepStrictEqual({ path: pExistingFilter }, pNewFilter)
|
|
59
59
|
);
|
|
60
60
|
}
|
|
61
|
-
function optionIsCompatible(
|
|
62
|
-
return !
|
|
61
|
+
function optionIsCompatible(pExistingOption, pNewOption) {
|
|
62
|
+
return !pExistingOption || isDeepStrictEqual(pExistingOption, pNewOption);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
function limitIsCompatible(pExistingLimit, pNewLimit) {
|
|
@@ -70,6 +70,16 @@ function metricsIsCompatible(pExistingMetrics, pNewMetrics) {
|
|
|
70
70
|
return pExistingMetrics || pExistingMetrics === pNewMetrics;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
function cacheOptionIsCompatible(pExistingCacheOption, pNewCacheOption) {
|
|
74
|
+
if (!pExistingCacheOption || !pNewCacheOption) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return (
|
|
78
|
+
pExistingCacheOption === pNewCacheOption ||
|
|
79
|
+
isDeepStrictEqual(pExistingCacheOption, pNewCacheOption)
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
/**
|
|
74
84
|
*
|
|
75
85
|
* @param {import("../../types/strict-options").IStrictCruiseOptions} pOldOptions
|
|
@@ -106,7 +116,8 @@ function optionsAreCompatible(pOldOptions, pNewOptions) {
|
|
|
106
116
|
optionIsCompatible(
|
|
107
117
|
pOldOptions.exoticRequireStrings,
|
|
108
118
|
pNewOptions.exoticRequireStrings
|
|
109
|
-
)
|
|
119
|
+
) &&
|
|
120
|
+
cacheOptionIsCompatible(pOldOptions.cache, pNewOptions.cache)
|
|
110
121
|
);
|
|
111
122
|
}
|
|
112
123
|
|
|
@@ -116,4 +127,5 @@ module.exports = {
|
|
|
116
127
|
limitsAreCompatible: limitIsCompatible,
|
|
117
128
|
metricsAreCompatible: metricsIsCompatible,
|
|
118
129
|
includeOnlyFiltersAreCompatible: includeOnlyIsCompatible,
|
|
130
|
+
cacheOptionIsCompatible,
|
|
119
131
|
};
|
package/src/cache/utl.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { createHash } = require("crypto");
|
|
2
|
+
const { readFileSync } = require("fs");
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @
|
|
6
|
-
* @param {any} pRightObject
|
|
7
|
-
* @returns {boolean}
|
|
5
|
+
* @param {string} pString
|
|
6
|
+
* @returns {string}
|
|
8
7
|
*/
|
|
9
|
-
function
|
|
8
|
+
function hash(pString) {
|
|
9
|
+
return createHash("sha1").update(pString).digest("base64");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {import("fs").PathOrFileDescriptor} pFileName
|
|
14
|
+
* @returns {string}
|
|
15
|
+
*/
|
|
16
|
+
function getFileHash(pFileName) {
|
|
10
17
|
try {
|
|
11
|
-
|
|
12
|
-
return true;
|
|
18
|
+
return hash(readFileSync(pFileName, "utf8"));
|
|
13
19
|
} catch (pError) {
|
|
14
|
-
return
|
|
20
|
+
return "file not found";
|
|
15
21
|
}
|
|
16
22
|
}
|
|
17
|
-
|
|
23
|
+
|
|
24
|
+
module.exports = { getFileHash };
|
package/src/cli/index.js
CHANGED
|
@@ -12,6 +12,7 @@ const extractTSConfig = require("../config-utl/extract-ts-config");
|
|
|
12
12
|
const extractBabelConfig = require("../config-utl/extract-babel-config");
|
|
13
13
|
const extractWebpackResolveConfig = require("../config-utl/extract-webpack-resolve-config");
|
|
14
14
|
const extractKnownViolations = require("../config-utl/extract-known-violations");
|
|
15
|
+
const { INFO } = require("../utl/bus-log-levels");
|
|
15
16
|
const validateFileExistence = require("./utl/validate-file-existence");
|
|
16
17
|
const normalizeCliOptions = require("./normalize-cli-options");
|
|
17
18
|
const io = require("./utl/io");
|
|
@@ -83,9 +84,12 @@ function setUpListener(pCruiseOptions) {
|
|
|
83
84
|
pCruiseOptions?.ruleSet?.options?.progress?.type;
|
|
84
85
|
// eslint-disable-next-line security/detect-object-injection
|
|
85
86
|
const lListenerFunction = lString2Listener?.[lListenerID];
|
|
86
|
-
/* c8 ignore next
|
|
87
|
+
/* c8 ignore next 6 */
|
|
87
88
|
if (Boolean(lListenerFunction)) {
|
|
88
|
-
lListenerFunction(
|
|
89
|
+
lListenerFunction(
|
|
90
|
+
bus,
|
|
91
|
+
pCruiseOptions?.ruleSet?.options?.progress?.maximumLevel ?? INFO
|
|
92
|
+
);
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
|
|
@@ -116,7 +120,7 @@ function runCruise(pFileDirectoryArray, pCruiseOptions) {
|
|
|
116
120
|
}
|
|
117
121
|
);
|
|
118
122
|
|
|
119
|
-
bus.emit("progress", "cli: writing results");
|
|
123
|
+
bus.emit("progress", "cli: writing results", { complete: 1 });
|
|
120
124
|
bus.emit("write-start");
|
|
121
125
|
io.write(lCruiseOptions.outputTo, lReportingResult.output);
|
|
122
126
|
|
|
@@ -1,67 +1,8 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
/* eslint-disable security/detect-object-injection */
|
|
3
|
-
const fs = require("fs");
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const pathToPosix = require("../../utl/path-to-posix");
|
|
6
3
|
const getExtension = require("../../utl/get-extension.js");
|
|
7
4
|
const meta = require("../../extract/transpile/meta");
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @param {string[]} pIgnorablePathElements
|
|
11
|
-
* @returns {(string) => boolean}
|
|
12
|
-
*/
|
|
13
|
-
function notIgnorable(pIgnorablePathElements) {
|
|
14
|
-
return (pPath) => {
|
|
15
|
-
return !pIgnorablePathElements.includes(pPath);
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @param {string} pFullPathToFile
|
|
21
|
-
* @param {string} pBaseDirectory
|
|
22
|
-
* @returns {boolean}
|
|
23
|
-
*/
|
|
24
|
-
function fileIsDirectory(pFullPathToFile, pBaseDirectory) {
|
|
25
|
-
try {
|
|
26
|
-
const lStat = fs.statSync(path.join(pBaseDirectory, pFullPathToFile));
|
|
27
|
-
return lStat.isDirectory();
|
|
28
|
-
} catch (pError) {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @param {string} pDirectoryName
|
|
35
|
-
* @param {{baseDir: string; ignorablePathElements: string[]}} pOptions
|
|
36
|
-
* @returns {string[]}
|
|
37
|
-
*/
|
|
38
|
-
function listAllModules(pDirectoryName, { baseDir, ignorablePathElements }) {
|
|
39
|
-
return fs
|
|
40
|
-
.readdirSync(path.join(baseDir, pDirectoryName))
|
|
41
|
-
.filter(notIgnorable(ignorablePathElements))
|
|
42
|
-
.map((pFileName) => path.join(pDirectoryName, pFileName))
|
|
43
|
-
.map((pFullPathToFile) => ({
|
|
44
|
-
fullPathToFile: pFullPathToFile,
|
|
45
|
-
isDirectory: fileIsDirectory(pFullPathToFile, baseDir),
|
|
46
|
-
}))
|
|
47
|
-
.reduce(
|
|
48
|
-
/**
|
|
49
|
-
* @param {string[]} pSum
|
|
50
|
-
* @param {{fullPathToFile: string; isDirectory: boolean}} pCurrentValue
|
|
51
|
-
* @returns {string[]}
|
|
52
|
-
*/
|
|
53
|
-
(pSum, { fullPathToFile, isDirectory }) => {
|
|
54
|
-
if (isDirectory) {
|
|
55
|
-
return pSum.concat(
|
|
56
|
-
listAllModules(fullPathToFile, { baseDir, ignorablePathElements })
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
return pSum.concat(fullPathToFile);
|
|
60
|
-
},
|
|
61
|
-
[]
|
|
62
|
-
)
|
|
63
|
-
.map((pFullPathToFile) => pathToPosix(pFullPathToFile));
|
|
64
|
-
}
|
|
5
|
+
const findAllFiles = require("../../utl/find-all-files");
|
|
65
6
|
|
|
66
7
|
/**
|
|
67
8
|
* @param {Record<string,number>} pAll
|
|
@@ -84,27 +25,24 @@ function compareByCount(pCountsObject) {
|
|
|
84
25
|
|
|
85
26
|
/**
|
|
86
27
|
* @param {string[]} pDirectories
|
|
87
|
-
* @param {{baseDir?: string;
|
|
28
|
+
* @param {{baseDir?: string; ignoreFileContents?: string}=} pOptions
|
|
88
29
|
* @returns {string[]}
|
|
89
30
|
*/
|
|
90
31
|
module.exports = function findExtensions(pDirectories, pOptions) {
|
|
91
32
|
const lOptions = {
|
|
92
33
|
baseDir: process.cwd(),
|
|
93
|
-
ignorablePathElements: [
|
|
94
|
-
".git",
|
|
95
|
-
".husky",
|
|
96
|
-
".vscode",
|
|
97
|
-
"coverage",
|
|
98
|
-
"node_nodules",
|
|
99
|
-
"nyc",
|
|
100
|
-
],
|
|
101
34
|
scannableExtensions: meta.scannableExtensions,
|
|
102
35
|
...pOptions,
|
|
103
36
|
};
|
|
104
37
|
|
|
105
38
|
const lExtensionsWithCounts = pDirectories
|
|
106
39
|
.flatMap((pDirectory) =>
|
|
107
|
-
|
|
40
|
+
findAllFiles(pDirectory, {
|
|
41
|
+
baseDir: lOptions.baseDir,
|
|
42
|
+
ignoreFileContents: lOptions?.ignoreFileContents,
|
|
43
|
+
})
|
|
44
|
+
.map(getExtension)
|
|
45
|
+
.filter(Boolean)
|
|
108
46
|
)
|
|
109
47
|
.reduce(reduceToCounts, {});
|
|
110
48
|
|
|
@@ -29,8 +29,11 @@ function populate(pInitOptions) {
|
|
|
29
29
|
),
|
|
30
30
|
};
|
|
31
31
|
if (lReturnValue.specifyResolutionExtensions) {
|
|
32
|
+
const lFoldersToScan = lReturnValue.sourceLocation.concat(
|
|
33
|
+
lReturnValue.testLocation
|
|
34
|
+
);
|
|
32
35
|
lReturnValue.resolutionExtensions = findExtensions(
|
|
33
|
-
|
|
36
|
+
lFoldersToScan.length > 0 ? lFoldersToScan : ["."]
|
|
34
37
|
);
|
|
35
38
|
}
|
|
36
39
|
return lReturnValue;
|
|
@@ -144,19 +144,6 @@ function normalizeProgress(pCliOptions) {
|
|
|
144
144
|
return lProgress ? { progress: lProgress } : {};
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
function normalizeCacheFolderName(pCliOptions) {
|
|
148
|
-
const lCache = get(pCliOptions, "cache", false);
|
|
149
|
-
let lReturnValue = clone(pCliOptions);
|
|
150
|
-
|
|
151
|
-
if (lCache === true) {
|
|
152
|
-
lReturnValue = {
|
|
153
|
-
...lReturnValue,
|
|
154
|
-
cache: defaults.CACHE_FOLDER,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
return lReturnValue;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
147
|
/**
|
|
161
148
|
* returns the pOptionsAsPassedFromCommander, so that the returned value contains a
|
|
162
149
|
* valid value for each possible option
|
|
@@ -170,7 +157,6 @@ module.exports = function normalizeOptions(pOptionsAsPassedFromCommander) {
|
|
|
170
157
|
outputTo: defaults.OUTPUT_TO,
|
|
171
158
|
outputType: defaults.OUTPUT_TYPE,
|
|
172
159
|
...pOptionsAsPassedFromCommander,
|
|
173
|
-
// ...ejectNonCLIOptions(pOptionsAsPassedFromCommander, pKnownCliOptions),
|
|
174
160
|
};
|
|
175
161
|
|
|
176
162
|
if (has(lOptions, "moduleSystems")) {
|
|
@@ -186,7 +172,6 @@ module.exports = function normalizeOptions(pOptionsAsPassedFromCommander) {
|
|
|
186
172
|
lOptions = { ...lOptions, ...normalizeValidationOption(lOptions) };
|
|
187
173
|
lOptions = { ...lOptions, ...normalizeProgress(lOptions) };
|
|
188
174
|
lOptions = { ...lOptions, ...normalizeKnownViolationsOption(lOptions) };
|
|
189
|
-
lOptions = normalizeCacheFolderName(lOptions);
|
|
190
175
|
lOptions = normalizeConfigFileName(
|
|
191
176
|
lOptions,
|
|
192
177
|
"webpackConfig",
|
package/src/main/index.js
CHANGED
|
@@ -6,8 +6,12 @@ const enrich = require("../enrich");
|
|
|
6
6
|
const cruiseResultSchema = require("../schema/cruise-result.schema.js");
|
|
7
7
|
const meta = require("../extract/transpile/meta");
|
|
8
8
|
const bus = require("../utl/bus");
|
|
9
|
-
const {
|
|
10
|
-
|
|
9
|
+
const {
|
|
10
|
+
canServeFromCache,
|
|
11
|
+
readCache,
|
|
12
|
+
writeCache,
|
|
13
|
+
clearCache,
|
|
14
|
+
} = require("../cache/cache");
|
|
11
15
|
const normalizeFilesAndDirectories = require("./files-and-dirs/normalize");
|
|
12
16
|
const validateRuleSet = require("./rule-set/validate");
|
|
13
17
|
const normalizeRuleSet = require("./rule-set/normalize");
|
|
@@ -41,23 +45,20 @@ function format(pResult, pFormatOptions = {}) {
|
|
|
41
45
|
return reportWrap(pResult, lFormatOptions);
|
|
42
46
|
}
|
|
43
47
|
|
|
44
|
-
const TOTAL_STEPS =
|
|
48
|
+
const TOTAL_STEPS = 9;
|
|
45
49
|
|
|
46
50
|
function c(pComplete, pTotal = TOTAL_STEPS) {
|
|
47
51
|
return { complete: pComplete / pTotal };
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
/** @type {import("../..").futureCruise} */
|
|
51
|
-
// eslint-disable-next-line max-lines-per-function,
|
|
55
|
+
// eslint-disable-next-line max-lines-per-function, max-statements
|
|
52
56
|
function futureCruise(
|
|
53
57
|
pFileAndDirectoryArray,
|
|
54
58
|
pCruiseOptions,
|
|
55
59
|
pResolveOptions,
|
|
56
60
|
pTranspileOptions
|
|
57
61
|
) {
|
|
58
|
-
/** @type {import("../../types/cruise-result").IRevisionData|null} */
|
|
59
|
-
let lRevisionData = null;
|
|
60
|
-
|
|
61
62
|
bus.emit("progress", "parsing options", c(1));
|
|
62
63
|
/** @type {import("../../types/strict-options").IStrictCruiseOptions} */
|
|
63
64
|
let lCruiseOptions = normalizeCruiseOptions(
|
|
@@ -67,16 +68,11 @@ function futureCruise(
|
|
|
67
68
|
|
|
68
69
|
if (lCruiseOptions.cache) {
|
|
69
70
|
bus.emit("progress", "cache: checking freshness", c(2));
|
|
70
|
-
lRevisionData = getRevisionData(
|
|
71
|
-
new Set(
|
|
72
|
-
meta.scannableExtensions.concat(lCruiseOptions.extraExtensionsToScan)
|
|
73
|
-
)
|
|
74
|
-
);
|
|
75
|
-
if (lRevisionData && canServeFromCache(lCruiseOptions, lRevisionData)) {
|
|
76
|
-
bus.emit("progress", "cache: retrieving from cache", c(3));
|
|
77
|
-
const lCachedResults = readCache(lCruiseOptions.cache);
|
|
78
71
|
|
|
79
|
-
|
|
72
|
+
const lCachedResults = readCache(lCruiseOptions.cache.folder);
|
|
73
|
+
|
|
74
|
+
if (canServeFromCache(lCruiseOptions, lCachedResults)) {
|
|
75
|
+
bus.emit("progress", "cache: reporting from cache", c(8));
|
|
80
76
|
return reportWrap(lCachedResults, lCruiseOptions);
|
|
81
77
|
}
|
|
82
78
|
}
|
|
@@ -114,17 +110,18 @@ function futureCruise(
|
|
|
114
110
|
lNormalizedFileAndDirectoryArray
|
|
115
111
|
);
|
|
116
112
|
|
|
117
|
-
if (lCruiseOptions.cache
|
|
118
|
-
|
|
119
|
-
writeCache(lCruiseOptions.cache, lCruiseResult);
|
|
113
|
+
if (lCruiseOptions.cache) {
|
|
114
|
+
bus.emit("progress", "cache: saving", c(7));
|
|
115
|
+
writeCache(lCruiseOptions.cache.folder, lCruiseResult);
|
|
116
|
+
clearCache();
|
|
120
117
|
}
|
|
121
118
|
|
|
122
|
-
bus.emit("progress", "reporting", c(
|
|
119
|
+
bus.emit("progress", "reporting", c(8));
|
|
123
120
|
return reportWrap(lCruiseResult, lCruiseOptions);
|
|
124
121
|
}
|
|
125
122
|
|
|
126
123
|
// see [api.md](../../doc/api.md) and/ or the
|
|
127
|
-
// [type definition](
|
|
124
|
+
// [type definition](../../types/dependency-cruiser.d.ts) for details
|
|
128
125
|
/** @type {import("../..").cruise} */
|
|
129
126
|
function cruise(pFileAndDirectoryArray, pOptions, pResolveOptions, pTSConfig) {
|
|
130
127
|
return futureCruise(pFileAndDirectoryArray, pOptions, pResolveOptions, {
|
|
@@ -5,6 +5,9 @@ const has = require("lodash/has");
|
|
|
5
5
|
const { normalizeREProperties } = require("../utl/normalize-re-properties");
|
|
6
6
|
const defaults = require("./defaults.js");
|
|
7
7
|
|
|
8
|
+
const DEFAULT_CACHE_FOLDER = "node_modules/.cache/dependency-cruiser";
|
|
9
|
+
const DEFAULT_CACHE_STRATEGY = "metadata";
|
|
10
|
+
|
|
8
11
|
function uniq(pArray) {
|
|
9
12
|
return [...new Set(pArray)];
|
|
10
13
|
}
|
|
@@ -139,6 +142,33 @@ function shouldCalculateMetrics(pOptions) {
|
|
|
139
142
|
);
|
|
140
143
|
}
|
|
141
144
|
|
|
145
|
+
/**
|
|
146
|
+
* @param {string|boolean|Partial<import("../../../types/cache-options").ICacheOptions>} pCacheOptions
|
|
147
|
+
* @returns {import("../../../types/cache-options").ICacheOptions}
|
|
148
|
+
*/
|
|
149
|
+
function normalizeCacheOptions(pCacheOptions) {
|
|
150
|
+
let lNormalizedCacheOptions = pCacheOptions;
|
|
151
|
+
|
|
152
|
+
if (typeof pCacheOptions === "string") {
|
|
153
|
+
lNormalizedCacheOptions = {
|
|
154
|
+
folder: pCacheOptions,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (pCacheOptions === true) {
|
|
159
|
+
lNormalizedCacheOptions = {};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// TODO: put these values in a central spot as constants
|
|
163
|
+
// (folder is already in src/cli/defaults.js but depending on the UI (cli)
|
|
164
|
+
// is not OK. We might b.t.w. wanna deduplicate the defaulting)
|
|
165
|
+
return {
|
|
166
|
+
folder: DEFAULT_CACHE_FOLDER,
|
|
167
|
+
strategy: DEFAULT_CACHE_STRATEGY,
|
|
168
|
+
...lNormalizedCacheOptions,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
142
172
|
/**
|
|
143
173
|
*
|
|
144
174
|
* @param {import('../../../types/options').ICruiseOptions} pOptions
|
|
@@ -186,6 +216,9 @@ function normalizeCruiseOptions(pOptions, pFileAndDirectoryArray = []) {
|
|
|
186
216
|
// if (has(pOptions, "ruleSet")) {
|
|
187
217
|
// lReturnValue.ruleSet = normalizeRuleSet(pOptions.ruleSet);
|
|
188
218
|
// }
|
|
219
|
+
if (lReturnValue.cache) {
|
|
220
|
+
lReturnValue.cache = normalizeCacheOptions(lReturnValue.cache);
|
|
221
|
+
}
|
|
189
222
|
|
|
190
223
|
return normalizeFocusDepth(lReturnValue);
|
|
191
224
|
}
|
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"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean","enum":[false]},{"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"},"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"]},"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","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"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean","enum":[false]},{"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","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"}}},"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","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"}}}}}}}}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const { readdirSync, statSync, readFileSync } = require("fs");
|
|
2
|
+
const { join } = require("path");
|
|
3
|
+
const ignore = require("ignore");
|
|
4
|
+
const pathToPosix = require("./path-to-posix");
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @param {string} pFullPathToFile
|
|
8
|
+
* @param {string} pBaseDirectory
|
|
9
|
+
* @returns {boolean}
|
|
10
|
+
*/
|
|
11
|
+
function fileIsDirectory(pFullPathToFile, pBaseDirectory) {
|
|
12
|
+
try {
|
|
13
|
+
const lStat = statSync(join(pBaseDirectory, pFullPathToFile));
|
|
14
|
+
return lStat.isDirectory();
|
|
15
|
+
} catch (pError) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param {string} pDirectoryName
|
|
22
|
+
* @param {{baseDir: string; ignoreFilterFn: (pString:string, pIndex: number, pArray: string[]) => boolean)}} pOptions
|
|
23
|
+
* @returns {string[]}
|
|
24
|
+
*/
|
|
25
|
+
function walk(pDirectoryName, { baseDir, ignoreFilterFn }) {
|
|
26
|
+
return readdirSync(join(baseDir, pDirectoryName))
|
|
27
|
+
.map((pFileName) => join(pDirectoryName, pFileName))
|
|
28
|
+
.filter(ignoreFilterFn)
|
|
29
|
+
.map((pFullPathToFile) => ({
|
|
30
|
+
fullPathToFile: pFullPathToFile,
|
|
31
|
+
isDirectory: fileIsDirectory(pFullPathToFile, baseDir),
|
|
32
|
+
}))
|
|
33
|
+
.reduce(
|
|
34
|
+
/**
|
|
35
|
+
* @param {string[]} pSum
|
|
36
|
+
* @param {{fullPathToFile: string; isDirectory: boolean}} pCurrentValue
|
|
37
|
+
* @returns {string[]}
|
|
38
|
+
*/
|
|
39
|
+
(pSum, { fullPathToFile, isDirectory }) => {
|
|
40
|
+
if (isDirectory) {
|
|
41
|
+
return pSum.concat(walk(fullPathToFile, { baseDir, ignoreFilterFn }));
|
|
42
|
+
}
|
|
43
|
+
return pSum.concat(fullPathToFile);
|
|
44
|
+
},
|
|
45
|
+
[]
|
|
46
|
+
)
|
|
47
|
+
.map((pFullPathToFile) => pathToPosix(pFullPathToFile));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function readIgnoreFile(pFileName) {
|
|
51
|
+
try {
|
|
52
|
+
return readFileSync(pFileName, "utf8");
|
|
53
|
+
} catch (pError) {
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @param {string} pDirectoryName
|
|
60
|
+
* @param {{baseDir: string; ignoreFileContents?: string; additionalIgnorePatterns?: string[]}} pOptions
|
|
61
|
+
* @returns {string[]}
|
|
62
|
+
*/
|
|
63
|
+
module.exports = function findAllFiles(
|
|
64
|
+
pDirectoryName,
|
|
65
|
+
{ baseDir, ignoreFileContents, additionalIgnorePatterns }
|
|
66
|
+
) {
|
|
67
|
+
const lIgnoreFileContents =
|
|
68
|
+
ignoreFileContents ?? readIgnoreFile(join(baseDir, ".gitignore"));
|
|
69
|
+
const lAdditionalIgnorePatterns = additionalIgnorePatterns ?? [".git"];
|
|
70
|
+
const lIgnoreFilterFunction = ignore()
|
|
71
|
+
.add(lIgnoreFileContents)
|
|
72
|
+
.add(lAdditionalIgnorePatterns)
|
|
73
|
+
.createFilter();
|
|
74
|
+
|
|
75
|
+
return walk(pDirectoryName, {
|
|
76
|
+
baseDir,
|
|
77
|
+
ignoreFilterFn: lIgnoreFilterFunction,
|
|
78
|
+
});
|
|
79
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type cacheStrategyType = "metadata" | "content";
|
|
2
|
+
|
|
3
|
+
export interface ICacheOptions {
|
|
4
|
+
/**
|
|
5
|
+
* The folder to store the cache in.
|
|
6
|
+
*
|
|
7
|
+
* Defaults to node_modules/.cache/dependency-cruiser/
|
|
8
|
+
*/
|
|
9
|
+
folder: string;
|
|
10
|
+
/**
|
|
11
|
+
* The strategy to use for caching.
|
|
12
|
+
* - 'metadata': use git metadata to detect changes;
|
|
13
|
+
* - 'content': use (a checksum of) the contents of files to detect changes.
|
|
14
|
+
*
|
|
15
|
+
* The last one is useful if you're not on git or work on partial clones
|
|
16
|
+
* (which is typical on CI's). Trade-of: might be a bit slower, will not
|
|
17
|
+
* detect changes on files that are entirely new.
|
|
18
|
+
*
|
|
19
|
+
* Defaults to 'metadata'
|
|
20
|
+
*/
|
|
21
|
+
strategy: cacheStrategyType;
|
|
22
|
+
}
|
package/types/options.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ModuleSystemType, OutputType } from "./shared-types";
|
|
1
|
+
import { IBaselineViolations } from "./baseline-violations";
|
|
2
|
+
import { ICacheOptions } from "./cache-options";
|
|
4
3
|
import {
|
|
5
4
|
IDoNotFollowType,
|
|
6
5
|
IExcludeType,
|
|
7
6
|
IFocusType,
|
|
7
|
+
IHighlightType,
|
|
8
8
|
IIncludeOnlyType,
|
|
9
9
|
IReachesType,
|
|
10
|
-
IHighlightType,
|
|
11
10
|
} from "./filter-types";
|
|
12
|
-
import {
|
|
11
|
+
import { IReporterOptions } from "./reporter-options";
|
|
12
|
+
import { IFlattenedRuleSet } from "./rule-set";
|
|
13
|
+
import { ModuleSystemType, OutputType } from "./shared-types";
|
|
13
14
|
|
|
14
15
|
export type ExternalModuleResolutionStrategyType = "node_modules" | "yarn-pnp";
|
|
15
16
|
export type ProgressType = "cli-feedback" | "performance-log" | "none";
|
|
@@ -210,7 +211,7 @@ export interface ICruiseOptions {
|
|
|
210
211
|
* attribute. E.g. when you're 100% sure you _only_ have typescript & json
|
|
211
212
|
* and nothing else you can pass `['.ts', '.json']` - which can lead to performance
|
|
212
213
|
* gains on systems with slow i/o (like ms-windows), especially when your
|
|
213
|
-
* tsconfig contains paths/
|
|
214
|
+
* tsconfig contains paths/ aliases.
|
|
214
215
|
*/
|
|
215
216
|
extensions?: string[];
|
|
216
217
|
/**
|
|
@@ -220,7 +221,7 @@ export interface ICruiseOptions {
|
|
|
220
221
|
cachedInputFileSystem?: {
|
|
221
222
|
/**
|
|
222
223
|
* The number of milliseconds [enhanced-resolve](webpack/enhanced-resolve)'s
|
|
223
|
-
* cached file system should use for cache duration.
|
|
224
|
+
* cached file system should use for cache duration. Typically you won't
|
|
224
225
|
* have to touch this - the default works well for repos up to 5000 modules/
|
|
225
226
|
* 20000 dependencies, and likely for numbers above as well.
|
|
226
227
|
*
|
|
@@ -247,6 +248,12 @@ export interface ICruiseOptions {
|
|
|
247
248
|
* of each major step to stderr.
|
|
248
249
|
*/
|
|
249
250
|
type: ProgressType;
|
|
251
|
+
/**
|
|
252
|
+
* The maximum log level to emit messages at. Ranges from OFF (-1, don't " +
|
|
253
|
+
* show any messages), via SUMMARY (40), INFO (50), DEBUG (60) all the " +
|
|
254
|
+
* way to show ALL messages (99)."
|
|
255
|
+
*/
|
|
256
|
+
maximumLevel?: -1 | 40 | 50 | 60 | 70 | 80 | 99;
|
|
250
257
|
};
|
|
251
258
|
/**
|
|
252
259
|
* When this flag is set to true, dependency-cruiser will calculate (stability) metrics
|
|
@@ -254,10 +261,16 @@ export interface ICruiseOptions {
|
|
|
254
261
|
*/
|
|
255
262
|
metrics?: boolean;
|
|
256
263
|
/**
|
|
257
|
-
*
|
|
258
|
-
* caching
|
|
264
|
+
* - false: don't use caching.
|
|
265
|
+
* - true or empty object: use caching with the default settings
|
|
266
|
+
* - a string (deprecated): cache in the folder denoted by the string & use the
|
|
267
|
+
* default caching strategy. This is deprecated - instead pass a cache object
|
|
268
|
+
* e.g. ```{ folder: 'your/cache/location' }```
|
|
269
|
+
*
|
|
270
|
+
* Defaults to false.
|
|
271
|
+
* When caching is switched on the default cache folder is 'node_modules/.cache/dependency-cruiser/'
|
|
259
272
|
*/
|
|
260
|
-
cache?:
|
|
273
|
+
cache?: boolean | string | Partial<ICacheOptions>;
|
|
261
274
|
}
|
|
262
275
|
|
|
263
276
|
export interface IFormatOptions {
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
IStrictIncludeOnlyType,
|
|
14
14
|
IStrictReachesType,
|
|
15
15
|
} from "./strict-filter-types";
|
|
16
|
+
import { ICacheOptions } from "./cache-options";
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* the ICruiseOptions interface is lenient in what it accepts for convenience
|
|
@@ -40,6 +41,7 @@ export interface IStrictCruiseOptions extends ICruiseOptions {
|
|
|
40
41
|
externalModuleResolutionStrategy: ExternalModuleResolutionStrategyType;
|
|
41
42
|
exoticRequireStrings: string[];
|
|
42
43
|
metrics: boolean;
|
|
44
|
+
cache?: false | ICacheOptions;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
export interface IStrictFormatOptions extends IFormatOptions {
|