dependency-cruiser 12.4.0 → 12.5.0-beta-1
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/package.json +1 -1
- package/src/cache/cache.js +73 -60
- package/src/cache/content-strategy.js +265 -0
- package/src/cache/{git-revision-data.js → metadata-strategy.js} +27 -6
- package/src/cache/options-compatible.js +5 -5
- package/src/cache/utl.js +3 -2
- package/src/main/index.js +6 -10
- package/src/meta.js +1 -1
- package/src/schema/cruise-result.schema.js +1 -1
- package/types/cache-options.d.ts +3 -3
- package/types/cruise-result.d.ts +1 -1
package/package.json
CHANGED
package/src/cache/cache.js
CHANGED
|
@@ -2,73 +2,86 @@ const { readFileSync, mkdirSync, writeFileSync } = require("fs");
|
|
|
2
2
|
const { join } = require("path");
|
|
3
3
|
const meta = require("../extract/transpile/meta");
|
|
4
4
|
const { optionsAreCompatible } = require("./options-compatible");
|
|
5
|
-
const
|
|
5
|
+
const metadataStrategy = require("./metadata-strategy");
|
|
6
|
+
const contentStrategy = require("./content-strategy");
|
|
6
7
|
|
|
7
8
|
const CACHE_FILE_NAME = "cache.json";
|
|
8
|
-
let gRevisionData = null;
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
writeFileSync(
|
|
20
|
-
join(pCacheFolder, CACHE_FILE_NAME),
|
|
21
|
-
JSON.stringify(
|
|
22
|
-
lRevisionData
|
|
23
|
-
? {
|
|
24
|
-
...pCruiseResult,
|
|
25
|
-
revisionData: lRevisionData,
|
|
26
|
-
}
|
|
27
|
-
: pCruiseResult
|
|
28
|
-
),
|
|
29
|
-
"utf8"
|
|
30
|
-
);
|
|
31
|
-
}
|
|
10
|
+
module.exports = class Cache {
|
|
11
|
+
/**
|
|
12
|
+
* @param {import("../../types/cache-options").cacheStrategyType=} pCacheStrategy
|
|
13
|
+
*/
|
|
14
|
+
constructor(pCacheStrategy) {
|
|
15
|
+
this.revisionData = null;
|
|
16
|
+
this.cacheStrategy =
|
|
17
|
+
pCacheStrategy === "content" ? contentStrategy : metadataStrategy;
|
|
18
|
+
}
|
|
32
19
|
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
20
|
+
/**
|
|
21
|
+
* @param {import("../../types/strict-options").IStrictCruiseOptions} pCruiseOptions
|
|
22
|
+
* @param {import("../..").ICruiseResult} pCachedCruiseResult
|
|
23
|
+
* @param {import("../..").IRevisionData=} pRevisionData
|
|
24
|
+
* @returns {boolean}
|
|
25
|
+
*/
|
|
26
|
+
canServeFromCache(pCruiseOptions, pCachedCruiseResult, pRevisionData) {
|
|
27
|
+
this.revisionData =
|
|
28
|
+
pRevisionData ??
|
|
29
|
+
this.cacheStrategy.getRevisionData(
|
|
30
|
+
".",
|
|
31
|
+
pCachedCruiseResult,
|
|
32
|
+
pCruiseOptions,
|
|
33
|
+
{
|
|
34
|
+
extensions: new Set(
|
|
35
|
+
meta.scannableExtensions.concat(
|
|
36
|
+
pCruiseOptions.extraExtensionsToScan
|
|
37
|
+
)
|
|
38
|
+
),
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
return (
|
|
42
|
+
this.cacheStrategy.revisionDataEqual(
|
|
43
|
+
pCachedCruiseResult.revisionData,
|
|
44
|
+
this.revisionData
|
|
45
|
+
) &&
|
|
46
|
+
optionsAreCompatible(
|
|
47
|
+
pCachedCruiseResult.summary.optionsUsed,
|
|
48
|
+
pCruiseOptions
|
|
49
|
+
)
|
|
41
50
|
);
|
|
42
|
-
} catch (pError) {
|
|
43
|
-
return { modules: [], summary: {} };
|
|
44
51
|
}
|
|
45
|
-
}
|
|
46
52
|
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
revisionDataEqual(pCachedCruiseResult.revisionData, gRevisionData) &&
|
|
61
|
-
optionsAreCompatible(pCachedCruiseResult.summary.optionsUsed, pOptions)
|
|
62
|
-
);
|
|
63
|
-
}
|
|
53
|
+
/**
|
|
54
|
+
* @param {string} pCacheFolder
|
|
55
|
+
* @returns {import("../..").ICruiseResult}
|
|
56
|
+
*/
|
|
57
|
+
read(pCacheFolder) {
|
|
58
|
+
try {
|
|
59
|
+
return JSON.parse(
|
|
60
|
+
readFileSync(join(pCacheFolder, CACHE_FILE_NAME), "utf8")
|
|
61
|
+
);
|
|
62
|
+
} catch (pError) {
|
|
63
|
+
return { modules: [], summary: {} };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
64
66
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
67
|
+
/**
|
|
68
|
+
* @param {string} pCacheFolder
|
|
69
|
+
* @param {import("../..").ICruiseResult} pCruiseResult
|
|
70
|
+
* @param {import("../..").IRevisionData=} pRevisionData
|
|
71
|
+
*/
|
|
72
|
+
write(pCacheFolder, pCruiseResult, pRevisionData) {
|
|
73
|
+
const lRevisionData = pRevisionData ?? this.revisionData;
|
|
68
74
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
mkdirSync(pCacheFolder, { recursive: true });
|
|
76
|
+
writeFileSync(
|
|
77
|
+
join(pCacheFolder, CACHE_FILE_NAME),
|
|
78
|
+
JSON.stringify(
|
|
79
|
+
this.cacheStrategy.prepareRevisionDataForSaving(
|
|
80
|
+
pCruiseResult,
|
|
81
|
+
lRevisionData
|
|
82
|
+
)
|
|
83
|
+
),
|
|
84
|
+
"utf8"
|
|
85
|
+
);
|
|
86
|
+
}
|
|
74
87
|
};
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
const path = require("path");
|
|
2
|
+
const { isDeepStrictEqual } = require("util");
|
|
3
|
+
const { filenameMatchesPattern } = require("../graph-utl/match-facade");
|
|
4
|
+
const bus = require("../utl/bus");
|
|
5
|
+
const { DEBUG } = require("../utl/bus-log-levels");
|
|
6
|
+
const findAllFiles = require("../utl/find-all-files");
|
|
7
|
+
const { getFileHash } = require("./utl");
|
|
8
|
+
|
|
9
|
+
// skipping: "pairing broken", "unmodified", "unmerged", "type changed"
|
|
10
|
+
const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
|
|
11
|
+
"added",
|
|
12
|
+
"copied",
|
|
13
|
+
"deleted",
|
|
14
|
+
"ignored",
|
|
15
|
+
"modified",
|
|
16
|
+
"renamed",
|
|
17
|
+
"unmerged",
|
|
18
|
+
"untracked",
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @param {Set<string>} pExtensions
|
|
23
|
+
* @returns {(pChange: import("watskeburt").IChange) => boolean}
|
|
24
|
+
*/
|
|
25
|
+
function hasInterestingExtension(pExtensions) {
|
|
26
|
+
return (pChange) => pExtensions.has(path.extname(pChange.name));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @param {Set<import("watskeburt").changeTypeType>} pInterestingChangeTypes
|
|
31
|
+
* @returns {(pChange: import("watskeburt").IChange) => boolean}
|
|
32
|
+
*/
|
|
33
|
+
function isInterestingChangeType(pInterestingChangeTypes) {
|
|
34
|
+
return (pChange) => pInterestingChangeTypes.has(pChange.changeType);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @param {import("watskeburt").IChange} pChange
|
|
39
|
+
* @param {import("../..").IRevisionChange}
|
|
40
|
+
*/
|
|
41
|
+
function addCheckSumToChange(pChange) {
|
|
42
|
+
return {
|
|
43
|
+
...pChange,
|
|
44
|
+
checkSum: getFileHash(pChange.name),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @param {import("../../types/strict-filter-types").IStrictExcludeType} pExcludeOption
|
|
50
|
+
* @returns {(pFileName: string) => boolean}
|
|
51
|
+
*/
|
|
52
|
+
function excludeFilter(pExcludeOption) {
|
|
53
|
+
return (pFileName) => {
|
|
54
|
+
if (pExcludeOption.path) {
|
|
55
|
+
return !filenameMatchesPattern(pFileName, pExcludeOption.path);
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @param {import("../../types/strict-filter-types").IStrictIncludeOnlyType} pIncludeOnlyFilter
|
|
63
|
+
* @returns {(pFileName: string) => boolean}
|
|
64
|
+
*/
|
|
65
|
+
function includeOnlyFilter(pIncludeOnlyFilter) {
|
|
66
|
+
return (pFileName) => {
|
|
67
|
+
if (pIncludeOnlyFilter) {
|
|
68
|
+
return filenameMatchesPattern(pFileName, pIncludeOnlyFilter.path);
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function diffCachedModuleAgainstFileSet(
|
|
75
|
+
pFileSet,
|
|
76
|
+
pFileHashFunction = getFileHash
|
|
77
|
+
) {
|
|
78
|
+
// eslint-disable-next-line complexity
|
|
79
|
+
return (pModule) => {
|
|
80
|
+
if (
|
|
81
|
+
!pModule.consolidated &&
|
|
82
|
+
!pModule.coreModule &&
|
|
83
|
+
!pModule.couldNotResolve &&
|
|
84
|
+
!pModule.matchesDoNotFollow
|
|
85
|
+
) {
|
|
86
|
+
if (!pFileSet.has(pModule.source)) {
|
|
87
|
+
return { name: pModule.source, changeType: "deleted" };
|
|
88
|
+
}
|
|
89
|
+
const lNewCheckSum = pFileHashFunction(pModule.source);
|
|
90
|
+
if (lNewCheckSum !== pModule.checkSum) {
|
|
91
|
+
return {
|
|
92
|
+
name: pModule.source,
|
|
93
|
+
changeType: "modified",
|
|
94
|
+
checkSum: lNewCheckSum,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
name: pModule.source,
|
|
100
|
+
changeType: "unmodified",
|
|
101
|
+
checkSum: pModule.checkSum,
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
- there is no cache yet:
|
|
108
|
+
modules will === []; all files will be marked as 'added'
|
|
109
|
+
- there is a cache and it contains checksums:
|
|
110
|
+
- existing files that are not in the cache => added
|
|
111
|
+
- modules that are in the cache:
|
|
112
|
+
- don't exist anymore => deleted TODO:
|
|
113
|
+
we might wrongly bump into this for files that are gitignored and that don't have an interesting extension
|
|
114
|
+
- cached checksum === current checksum => not a change; left out
|
|
115
|
+
- cached checksum !== current checksum => modified
|
|
116
|
+
- there is a cache, but it doesn't contain checksums => same as before, except
|
|
117
|
+
all files will be marked as 'modified'
|
|
118
|
+
* @param {string} pDirectory
|
|
119
|
+
* @param {import("../..").ICruiseResult} pCachedCruiseResult
|
|
120
|
+
* @param {Object} pOptions
|
|
121
|
+
* @param {Set<string>} pOptions.extensions
|
|
122
|
+
* @param {string} pOptions.baseDir
|
|
123
|
+
* @returns {{source: string; changeType: import("watskeburt").changeTypeType; checkSum: string}[]}
|
|
124
|
+
*/
|
|
125
|
+
function findChanges(pDirectory, pCachedCruiseResult, pOptions) {
|
|
126
|
+
bus.emit("progress", "cache: - hauling revision data", { level: DEBUG });
|
|
127
|
+
const lFileSet = new Set(
|
|
128
|
+
findAllFiles(pDirectory, {
|
|
129
|
+
baseDir: pOptions.baseDir,
|
|
130
|
+
})
|
|
131
|
+
.filter(excludeFilter(pOptions.exclude))
|
|
132
|
+
.filter(includeOnlyFilter(pOptions.includeOnly))
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
bus.emit("progress", "cache: - determining cached vs new", { level: DEBUG });
|
|
136
|
+
const lDiffCachedVsNew = pCachedCruiseResult.modules.map(
|
|
137
|
+
diffCachedModuleAgainstFileSet(lFileSet)
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
bus.emit("progress", "cache: - determining new vs cached", { level: DEBUG });
|
|
141
|
+
lDiffCachedVsNew.forEach(({ name }) => lFileSet.delete(name));
|
|
142
|
+
|
|
143
|
+
const lDiffNewVsCached = [];
|
|
144
|
+
for (let lFileName of lFileSet) {
|
|
145
|
+
lDiffNewVsCached.push({
|
|
146
|
+
name: lFileName,
|
|
147
|
+
changeType: "added",
|
|
148
|
+
checkSum: getFileHash(lFileName),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
bus.emit("progress", "cache: - returning revision data", { level: DEBUG });
|
|
153
|
+
return lDiffCachedVsNew
|
|
154
|
+
.concat(lDiffNewVsCached)
|
|
155
|
+
.filter(hasInterestingExtension(pOptions.extensions));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
*
|
|
160
|
+
* @param {string} pDirectory
|
|
161
|
+
* @param {import("../..").ICruiseResult} pCachedCruiseResult
|
|
162
|
+
* @param {import("../../types/strict-options").IStrictCruiseOptions} pCruiseOptions
|
|
163
|
+
* @param {Object} pOptions
|
|
164
|
+
* @param {Set<string>} pOptions.extensions
|
|
165
|
+
* @param {Set<import("watskeburt").changeTypeType>} pOptions.interestingChangeTypes
|
|
166
|
+
* @param {string} pOptions.baseDir
|
|
167
|
+
* @param {(pString:string) => Array<import("watskeburt").IChange>} pOptions.diffListFn
|
|
168
|
+
* @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checkSumFn
|
|
169
|
+
* @returns {import("../..").IRevisionData}
|
|
170
|
+
*/
|
|
171
|
+
function getRevisionData(
|
|
172
|
+
pDirectory,
|
|
173
|
+
pCachedCruiseResult,
|
|
174
|
+
pCruiseOptions,
|
|
175
|
+
pOptions
|
|
176
|
+
) {
|
|
177
|
+
const lOptions = {
|
|
178
|
+
diffListFn: findChanges,
|
|
179
|
+
checkSumFn: addCheckSumToChange,
|
|
180
|
+
interestingChangeTypes: DEFAULT_INTERESTING_CHANGE_TYPES,
|
|
181
|
+
baseDir: process.cwd(),
|
|
182
|
+
...pOptions,
|
|
183
|
+
};
|
|
184
|
+
return {
|
|
185
|
+
SHA1: "unknown-in-content-cache-strategy",
|
|
186
|
+
changes: lOptions
|
|
187
|
+
.diffListFn(pDirectory, pCachedCruiseResult, {
|
|
188
|
+
baseDir: lOptions.baseDir,
|
|
189
|
+
extensions: lOptions.extensions,
|
|
190
|
+
includeOnly: pCruiseOptions.includeOnly,
|
|
191
|
+
exclude: pCruiseOptions.exclude,
|
|
192
|
+
})
|
|
193
|
+
.filter(isInterestingChangeType(lOptions.interestingChangeTypes)),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @param {import("../..").IRevisionData} pExistingRevisionData
|
|
199
|
+
* @param {import("../..").IRevisionData} pNewRevisionData
|
|
200
|
+
* @returns {boolean}
|
|
201
|
+
*/
|
|
202
|
+
function revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
|
|
203
|
+
return (
|
|
204
|
+
Boolean(pExistingRevisionData) &&
|
|
205
|
+
Boolean(pNewRevisionData) &&
|
|
206
|
+
isDeepStrictEqual(pExistingRevisionData.changes, pNewRevisionData.changes)
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @param {import("../..").IModule} pModule
|
|
212
|
+
* @param {import("../..").IRevisionChange}
|
|
213
|
+
*/
|
|
214
|
+
function addCheckSumToModule(pModule) {
|
|
215
|
+
if (
|
|
216
|
+
!pModule.consolidated &&
|
|
217
|
+
!pModule.coreModule &&
|
|
218
|
+
!pModule.couldNotResolve &&
|
|
219
|
+
!pModule.matchesDoNotFollow
|
|
220
|
+
) {
|
|
221
|
+
return {
|
|
222
|
+
...pModule,
|
|
223
|
+
checkSum: getFileHash(pModule.source),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return pModule;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @param {import("../..").IRevisionChange[]} pChanges
|
|
231
|
+
* @param {import("../..").IModule[]} pModules
|
|
232
|
+
* @returns {import("../..").IRevisionChange[]}
|
|
233
|
+
*/
|
|
234
|
+
function refreshChanges(pChanges, pModules) {
|
|
235
|
+
return pChanges.filter(
|
|
236
|
+
(pChange) =>
|
|
237
|
+
!pModules.some(
|
|
238
|
+
(pModule) =>
|
|
239
|
+
pModule.source === pChange.name &&
|
|
240
|
+
pModule.checkSum === pChange.checkSum
|
|
241
|
+
)
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
|
|
246
|
+
const lModules = pCruiseResult.modules.map(addCheckSumToModule);
|
|
247
|
+
const lRevisionData = {
|
|
248
|
+
...pRevisionData,
|
|
249
|
+
changes: refreshChanges(pRevisionData.changes, lModules),
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
return pRevisionData
|
|
253
|
+
? {
|
|
254
|
+
...pCruiseResult,
|
|
255
|
+
modules: lModules,
|
|
256
|
+
revisionData: lRevisionData,
|
|
257
|
+
}
|
|
258
|
+
: pCruiseResult;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
module.exports = {
|
|
262
|
+
getRevisionData,
|
|
263
|
+
revisionDataEqual,
|
|
264
|
+
prepareRevisionDataForSaving,
|
|
265
|
+
};
|
|
@@ -16,7 +16,6 @@ const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
|
|
|
16
16
|
]);
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
19
|
* @param {Set<string>} pExtensions
|
|
21
20
|
* @returns {(pChange: import("watskeburt").IChange) => boolean}
|
|
22
21
|
*/
|
|
@@ -42,7 +41,7 @@ function isInterestingChangeType(pInterestingChangeTypes) {
|
|
|
42
41
|
function addChecksum(pChange) {
|
|
43
42
|
return {
|
|
44
43
|
...pChange,
|
|
45
|
-
|
|
44
|
+
checkSum: getFileHash(pChange.name),
|
|
46
45
|
};
|
|
47
46
|
}
|
|
48
47
|
|
|
@@ -50,21 +49,26 @@ function addChecksum(pChange) {
|
|
|
50
49
|
*
|
|
51
50
|
* @param {Set<string>} pExtensions
|
|
52
51
|
* @param {Set<import("watskeburt").changeTypeType>} pInterestingChangeTypes
|
|
52
|
+
* @param {import("../../types/strict-options").IStrictCruiseOptions} pCruiseOptions
|
|
53
53
|
* @param {Object} pOptions
|
|
54
|
+
* @param {Set<string>} pOptions.extensions
|
|
55
|
+
* @param {Set<import("watskeburt").changeTypeType>} pOptions.interestingChangeTypes
|
|
54
56
|
* @param {() => string} pOptions.shaRetrievalFn
|
|
55
57
|
* @param {(pString:string) => Array<import("watskeburt").IChange>} pOptions.diffListFn
|
|
56
58
|
* @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checkSumFn
|
|
57
59
|
* @returns {import("../../types/dependency-cruiser").IRevisionData}
|
|
58
60
|
*/
|
|
59
61
|
function getRevisionData(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
pDirectory,
|
|
63
|
+
pCachedCruiseResult,
|
|
64
|
+
pCruiseOptions,
|
|
62
65
|
pOptions
|
|
63
66
|
) {
|
|
64
67
|
const lOptions = {
|
|
65
68
|
shaRetrievalFn: getSHASync,
|
|
66
69
|
diffListFn: listSync,
|
|
67
70
|
checkSumFn: addChecksum,
|
|
71
|
+
interestingChangeTypes: DEFAULT_INTERESTING_CHANGE_TYPES,
|
|
68
72
|
...pOptions,
|
|
69
73
|
};
|
|
70
74
|
try {
|
|
@@ -73,8 +77,9 @@ function getRevisionData(
|
|
|
73
77
|
SHA1: lSHA,
|
|
74
78
|
changes: lOptions
|
|
75
79
|
.diffListFn(lSHA)
|
|
76
|
-
|
|
77
|
-
.filter(
|
|
80
|
+
// TODO: optimize - also apply filters for exclude and includeOnly (see content strategy)
|
|
81
|
+
.filter(hasInterestingExtension(lOptions.extensions))
|
|
82
|
+
.filter(isInterestingChangeType(lOptions.interestingChangeTypes))
|
|
78
83
|
.map(lOptions.checkSumFn),
|
|
79
84
|
};
|
|
80
85
|
} catch (pError) {
|
|
@@ -100,7 +105,23 @@ function revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
|
|
|
100
105
|
);
|
|
101
106
|
}
|
|
102
107
|
|
|
108
|
+
/**
|
|
109
|
+
*
|
|
110
|
+
* @param {import("../..").ICruiseResult} pCruiseResult
|
|
111
|
+
* @param {*} pRevisionData
|
|
112
|
+
* @returns {import("../..").ICruiseResult}
|
|
113
|
+
*/
|
|
114
|
+
function prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
|
|
115
|
+
return pRevisionData
|
|
116
|
+
? {
|
|
117
|
+
...pCruiseResult,
|
|
118
|
+
revisionData: pRevisionData,
|
|
119
|
+
}
|
|
120
|
+
: pCruiseResult;
|
|
121
|
+
}
|
|
122
|
+
|
|
103
123
|
module.exports = {
|
|
104
124
|
getRevisionData,
|
|
105
125
|
revisionDataEqual,
|
|
126
|
+
prepareRevisionDataForSaving,
|
|
106
127
|
};
|
|
@@ -6,7 +6,7 @@ const { isDeepStrictEqual } = require("util");
|
|
|
6
6
|
-i, --info
|
|
7
7
|
-V, --version
|
|
8
8
|
-h, --help
|
|
9
|
-
-T, --output-type <type> unless counting implicit shizzle like
|
|
9
|
+
-T, --output-type <type> unless counting implicit shizzle like dependents, metrics calculation
|
|
10
10
|
-f, --output-to <file>
|
|
11
11
|
-p, --progress [type]
|
|
12
12
|
-P, --prefix <prefix>
|
|
@@ -123,9 +123,9 @@ function optionsAreCompatible(pOldOptions, pNewOptions) {
|
|
|
123
123
|
|
|
124
124
|
module.exports = {
|
|
125
125
|
optionsAreCompatible,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
optionIsCompatible,
|
|
127
|
+
limitIsCompatible,
|
|
128
|
+
metricsIsCompatible,
|
|
129
|
+
includeOnlyIsCompatible,
|
|
130
130
|
cacheOptionIsCompatible,
|
|
131
131
|
};
|
package/src/cache/utl.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const { createHash } = require("crypto");
|
|
2
2
|
const { readFileSync } = require("fs");
|
|
3
|
+
const memoize = require("lodash/memoize");
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @param {string} pString
|
|
@@ -13,7 +14,7 @@ function hash(pString) {
|
|
|
13
14
|
* @param {import("fs").PathOrFileDescriptor} pFileName
|
|
14
15
|
* @returns {string}
|
|
15
16
|
*/
|
|
16
|
-
function
|
|
17
|
+
function _getFileHash(pFileName) {
|
|
17
18
|
try {
|
|
18
19
|
return hash(readFileSync(pFileName, "utf8"));
|
|
19
20
|
} catch (pError) {
|
|
@@ -21,4 +22,4 @@ function getFileHash(pFileName) {
|
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
module.exports = { getFileHash };
|
|
25
|
+
module.exports = { getFileHash: memoize(_getFileHash) };
|
package/src/main/index.js
CHANGED
|
@@ -6,12 +6,7 @@ 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
|
-
canServeFromCache,
|
|
11
|
-
readCache,
|
|
12
|
-
writeCache,
|
|
13
|
-
clearCache,
|
|
14
|
-
} = require("../cache/cache");
|
|
9
|
+
const Cache = require("../cache/cache");
|
|
15
10
|
const normalizeFilesAndDirectories = require("./files-and-dirs/normalize");
|
|
16
11
|
const validateRuleSet = require("./rule-set/validate");
|
|
17
12
|
const normalizeRuleSet = require("./rule-set/normalize");
|
|
@@ -65,13 +60,15 @@ function futureCruise(
|
|
|
65
60
|
validateCruiseOptions(pCruiseOptions),
|
|
66
61
|
pFileAndDirectoryArray
|
|
67
62
|
);
|
|
63
|
+
let lCache = null;
|
|
68
64
|
|
|
69
65
|
if (lCruiseOptions.cache) {
|
|
70
66
|
bus.emit("progress", "cache: checking freshness", c(2));
|
|
71
67
|
|
|
72
|
-
|
|
68
|
+
lCache = new Cache(lCruiseOptions?.cache.strategy);
|
|
69
|
+
const lCachedResults = lCache.read(lCruiseOptions.cache.folder);
|
|
73
70
|
|
|
74
|
-
if (canServeFromCache(lCruiseOptions, lCachedResults)) {
|
|
71
|
+
if (lCache.canServeFromCache(lCruiseOptions, lCachedResults)) {
|
|
75
72
|
bus.emit("progress", "cache: reporting from cache", c(8));
|
|
76
73
|
return reportWrap(lCachedResults, lCruiseOptions);
|
|
77
74
|
}
|
|
@@ -112,8 +109,7 @@ function futureCruise(
|
|
|
112
109
|
|
|
113
110
|
if (lCruiseOptions.cache) {
|
|
114
111
|
bus.emit("progress", "cache: saving", c(7));
|
|
115
|
-
|
|
116
|
-
clearCache();
|
|
112
|
+
lCache.write(lCruiseOptions.cache.folder, lCruiseResult);
|
|
117
113
|
}
|
|
118
114
|
|
|
119
115
|
bus.emit("progress", "reporting", c(8));
|
package/src/meta.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* generated - don't edit */
|
|
2
|
-
module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"},"revisionData":{"$ref":"#/definitions/RevisionDataType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"matchesReaches":{"type":"boolean"},"matchesHighlight":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid","circular"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"},"highlight":{"$ref":"#/definitions/CompoundHighlightType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]},"maximumLevel":{"type":"number","enum":[-1,40,50,60,70,80,99]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean","enum":[false]},{"$ref":"#/definitions/CacheOptionsType"}]},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics","markdown","mermaid"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"CacheOptionsType":{"type":"object","additionalProperties":false,"properties":{"folder":{"type":"string"},"strategy":{"$ref":"#/definitions/CacheStrategyType"}}},"CacheStrategyType":{"type":"string","enum":["metadata","content"]},"RevisionDataType":{"type":"object","required":["SHA1","changes"],"properties":{"SHA1":{"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["name","changeType"],"properties":{"name":{"type":"string"},"changeType":{"type":"string","enum":["added","copied","deleted","modified","renamed","type changed","unmerged","pairing broken","unknown","unmodified","untracked","ignored"]},"oldName":{"type":"string"},"checksum":{"type":"string"},"args":{"type":"array","items":{"type":"string"}},"rulesFile":{"type":"string"}}}}}}}}
|
|
2
|
+
module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"},"revisionData":{"$ref":"#/definitions/RevisionDataType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"matchesReaches":{"type":"boolean"},"matchesHighlight":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid","circular"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"},"highlight":{"$ref":"#/definitions/CompoundHighlightType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","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"}}}}}}}}
|
package/types/cache-options.d.ts
CHANGED
|
@@ -12,9 +12,9 @@ export interface ICacheOptions {
|
|
|
12
12
|
* - 'metadata': use git metadata to detect changes;
|
|
13
13
|
* - 'content': use (a checksum of) the contents of files to detect changes.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
* (which is typical on CI's). Trade-of:
|
|
17
|
-
*
|
|
15
|
+
* 'content'is useful if you're not on git or work on partial clones
|
|
16
|
+
* (which is typical on CI's). Trade-of: the 'content' strategy is typically
|
|
17
|
+
* slower.
|
|
18
18
|
*
|
|
19
19
|
* Defaults to 'metadata'
|
|
20
20
|
*/
|