dependency-cruiser 12.5.0-beta-1 → 12.5.0-beta-3

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dependency-cruiser",
3
- "version": "12.5.0-beta-1",
3
+ "version": "12.5.0-beta-3",
4
4
  "description": "Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.",
5
5
  "keywords": [
6
6
  "static analysis",
@@ -1,76 +1,21 @@
1
- const path = require("path");
2
1
  const { isDeepStrictEqual } = require("util");
3
- const { filenameMatchesPattern } = require("../graph-utl/match-facade");
4
2
  const bus = require("../utl/bus");
5
3
  const { DEBUG } = require("../utl/bus-log-levels");
6
4
  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
- }
5
+ const {
6
+ getFileHash,
7
+ excludeFilter,
8
+ includeOnlyFilter,
9
+ hasInterestingExtension,
10
+ isInterestingChangeType,
11
+ addCheckSumToChange,
12
+ } = require("./utl");
60
13
 
61
14
  /**
62
- * @param {import("../../types/strict-filter-types").IStrictIncludeOnlyType} pIncludeOnlyFilter
63
- * @returns {(pFileName: string) => boolean}
15
+ * @param {Set<string>} pFileSet
16
+ * @param {typeof getFileHash} pFileHashFunction
17
+ * @returns {import('../..').IRevisionChange}
64
18
  */
65
- function includeOnlyFilter(pIncludeOnlyFilter) {
66
- return (pFileName) => {
67
- if (pIncludeOnlyFilter) {
68
- return filenameMatchesPattern(pFileName, pIncludeOnlyFilter.path);
69
- }
70
- return true;
71
- };
72
- }
73
-
74
19
  function diffCachedModuleAgainstFileSet(
75
20
  pFileSet,
76
21
  pFileHashFunction = getFileHash
@@ -87,23 +32,24 @@ function diffCachedModuleAgainstFileSet(
87
32
  return { name: pModule.source, changeType: "deleted" };
88
33
  }
89
34
  const lNewCheckSum = pFileHashFunction(pModule.source);
90
- if (lNewCheckSum !== pModule.checkSum) {
35
+ if (lNewCheckSum !== pModule.checksum) {
91
36
  return {
92
37
  name: pModule.source,
93
38
  changeType: "modified",
94
- checkSum: lNewCheckSum,
39
+ checksum: lNewCheckSum,
95
40
  };
96
41
  }
97
42
  }
98
43
  return {
99
44
  name: pModule.source,
100
45
  changeType: "unmodified",
101
- checkSum: pModule.checkSum,
46
+ checksum: pModule.checksum,
102
47
  };
103
48
  };
104
49
  }
105
50
 
106
51
  /**
52
+ We can run into these scenarios:
107
53
  - there is no cache yet:
108
54
  modules will === []; all files will be marked as 'added'
109
55
  - there is a cache and it contains checksums:
@@ -120,16 +66,16 @@ function diffCachedModuleAgainstFileSet(
120
66
  * @param {Object} pOptions
121
67
  * @param {Set<string>} pOptions.extensions
122
68
  * @param {string} pOptions.baseDir
123
- * @returns {{source: string; changeType: import("watskeburt").changeTypeType; checkSum: string}[]}
69
+ * @returns {{source: string; changeType: import("watskeburt").changeTypeType; checksum: string}[]}
124
70
  */
125
71
  function findChanges(pDirectory, pCachedCruiseResult, pOptions) {
126
72
  bus.emit("progress", "cache: - hauling revision data", { level: DEBUG });
127
73
  const lFileSet = new Set(
128
74
  findAllFiles(pDirectory, {
129
75
  baseDir: pOptions.baseDir,
130
- })
131
- .filter(excludeFilter(pOptions.exclude))
132
- .filter(includeOnlyFilter(pOptions.includeOnly))
76
+ excludeFilterFn: excludeFilter(pOptions.exclude),
77
+ includeOnlyFilterFn: includeOnlyFilter(pOptions.includeOnly),
78
+ }).filter(hasInterestingExtension(pOptions.extensions))
133
79
  );
134
80
 
135
81
  bus.emit("progress", "cache: - determining cached vs new", { level: DEBUG });
@@ -145,14 +91,12 @@ function findChanges(pDirectory, pCachedCruiseResult, pOptions) {
145
91
  lDiffNewVsCached.push({
146
92
  name: lFileName,
147
93
  changeType: "added",
148
- checkSum: getFileHash(lFileName),
94
+ checksum: getFileHash(lFileName),
149
95
  });
150
96
  }
151
97
 
152
98
  bus.emit("progress", "cache: - returning revision data", { level: DEBUG });
153
- return lDiffCachedVsNew
154
- .concat(lDiffNewVsCached)
155
- .filter(hasInterestingExtension(pOptions.extensions));
99
+ return lDiffCachedVsNew.concat(lDiffNewVsCached);
156
100
  }
157
101
 
158
102
  /**
@@ -165,7 +109,7 @@ function findChanges(pDirectory, pCachedCruiseResult, pOptions) {
165
109
  * @param {Set<import("watskeburt").changeTypeType>} pOptions.interestingChangeTypes
166
110
  * @param {string} pOptions.baseDir
167
111
  * @param {(pString:string) => Array<import("watskeburt").IChange>} pOptions.diffListFn
168
- * @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checkSumFn
112
+ * @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checksumFn
169
113
  * @returns {import("../..").IRevisionData}
170
114
  */
171
115
  function getRevisionData(
@@ -176,8 +120,7 @@ function getRevisionData(
176
120
  ) {
177
121
  const lOptions = {
178
122
  diffListFn: findChanges,
179
- checkSumFn: addCheckSumToChange,
180
- interestingChangeTypes: DEFAULT_INTERESTING_CHANGE_TYPES,
123
+ checksumFn: addCheckSumToChange,
181
124
  baseDir: process.cwd(),
182
125
  ...pOptions,
183
126
  };
@@ -220,7 +163,7 @@ function addCheckSumToModule(pModule) {
220
163
  ) {
221
164
  return {
222
165
  ...pModule,
223
- checkSum: getFileHash(pModule.source),
166
+ checksum: getFileHash(pModule.source),
224
167
  };
225
168
  }
226
169
  return pModule;
@@ -237,22 +180,27 @@ function refreshChanges(pChanges, pModules) {
237
180
  !pModules.some(
238
181
  (pModule) =>
239
182
  pModule.source === pChange.name &&
240
- pModule.checkSum === pChange.checkSum
183
+ pModule.checksum === pChange.checksum
241
184
  )
242
185
  );
243
186
  }
244
187
 
188
+ /**
189
+ * @param {import("../..").ICruiseResult} pCruiseResult
190
+ * @param {import("../..").IRevisionData} pRevisionData
191
+ * @returns {import("../..").ICruiseResult}
192
+ */
245
193
  function prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
246
- const lModules = pCruiseResult.modules.map(addCheckSumToModule);
194
+ const lModulesWithCheckSum = pCruiseResult.modules.map(addCheckSumToModule);
247
195
  const lRevisionData = {
248
196
  ...pRevisionData,
249
- changes: refreshChanges(pRevisionData.changes, lModules),
197
+ changes: refreshChanges(pRevisionData.changes, lModulesWithCheckSum),
250
198
  };
251
199
 
252
200
  return pRevisionData
253
201
  ? {
254
202
  ...pCruiseResult,
255
- modules: lModules,
203
+ modules: lModulesWithCheckSum,
256
204
  revisionData: lRevisionData,
257
205
  }
258
206
  : pCruiseResult;
@@ -1,52 +1,14 @@
1
- const { extname } = require("path");
2
1
  const { isDeepStrictEqual } = require("util");
3
2
  const { getSHASync, listSync } = require("watskeburt");
4
- const { getFileHash } = require("./utl");
5
-
6
- // skipping: "pairing broken", "unmodified", "unmerged", "type changed"
7
- const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
8
- "added",
9
- "copied",
10
- "deleted",
11
- "ignored",
12
- "modified",
13
- "renamed",
14
- "unmerged",
15
- "untracked",
16
- ]);
17
-
18
- /**
19
- * @param {Set<string>} pExtensions
20
- * @returns {(pChange: import("watskeburt").IChange) => boolean}
21
- */
22
- function hasInterestingExtension(pExtensions) {
23
- return (pChange) =>
24
- pExtensions.has(extname(pChange.name)) ||
25
- (pChange.oldName && pExtensions.has(extname(pChange.oldName)));
26
- }
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("../../types/dependency-cruiser").IRevisionChange}
40
- */
41
- function addChecksum(pChange) {
42
- return {
43
- ...pChange,
44
- checkSum: getFileHash(pChange.name),
45
- };
46
- }
3
+ const {
4
+ isInterestingChangeType,
5
+ addCheckSumToChange,
6
+ excludeFilter,
7
+ includeOnlyFilter,
8
+ changeHasInterestingExtension,
9
+ } = require("./utl");
47
10
 
48
11
  /**
49
- *
50
12
  * @param {Set<string>} pExtensions
51
13
  * @param {Set<import("watskeburt").changeTypeType>} pInterestingChangeTypes
52
14
  * @param {import("../../types/strict-options").IStrictCruiseOptions} pCruiseOptions
@@ -55,8 +17,8 @@ function addChecksum(pChange) {
55
17
  * @param {Set<import("watskeburt").changeTypeType>} pOptions.interestingChangeTypes
56
18
  * @param {() => string} pOptions.shaRetrievalFn
57
19
  * @param {(pString:string) => Array<import("watskeburt").IChange>} pOptions.diffListFn
58
- * @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checkSumFn
59
- * @returns {import("../../types/dependency-cruiser").IRevisionData}
20
+ * @param {(import("watskeburt").IChange) => import("../..").IRevisionChange} pOptions.checksumFn
21
+ * @returns {import("../..").IRevisionData}
60
22
  */
61
23
  function getRevisionData(
62
24
  pDirectory,
@@ -67,8 +29,7 @@ function getRevisionData(
67
29
  const lOptions = {
68
30
  shaRetrievalFn: getSHASync,
69
31
  diffListFn: listSync,
70
- checkSumFn: addChecksum,
71
- interestingChangeTypes: DEFAULT_INTERESTING_CHANGE_TYPES,
32
+ checksumFn: addCheckSumToChange,
72
33
  ...pOptions,
73
34
  };
74
35
  try {
@@ -77,10 +38,13 @@ function getRevisionData(
77
38
  SHA1: lSHA,
78
39
  changes: lOptions
79
40
  .diffListFn(lSHA)
80
- // TODO: optimize - also apply filters for exclude and includeOnly (see content strategy)
81
- .filter(hasInterestingExtension(lOptions.extensions))
41
+ .filter(({ name }) => excludeFilter(pCruiseOptions.exclude)(name))
42
+ .filter(({ name }) =>
43
+ includeOnlyFilter(pCruiseOptions.includeOnly)(name)
44
+ )
45
+ .filter(changeHasInterestingExtension(lOptions.extensions))
82
46
  .filter(isInterestingChangeType(lOptions.interestingChangeTypes))
83
- .map(lOptions.checkSumFn),
47
+ .map(lOptions.checksumFn),
84
48
  };
85
49
  } catch (pError) {
86
50
  throw new Error(
@@ -92,8 +56,8 @@ function getRevisionData(
92
56
  }
93
57
 
94
58
  /**
95
- * @param {import("../../types/dependency-cruiser").IRevisionData} pExistingRevisionData
96
- * @param {import("../../types/dependency-cruiser").IRevisionData} pNewRevisionData
59
+ * @param {import("../..").IRevisionData} pExistingRevisionData
60
+ * @param {import("../..").IRevisionData} pNewRevisionData
97
61
  * @returns {boolean}
98
62
  */
99
63
  function revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
@@ -106,9 +70,8 @@ function revisionDataEqual(pExistingRevisionData, pNewRevisionData) {
106
70
  }
107
71
 
108
72
  /**
109
- *
110
73
  * @param {import("../..").ICruiseResult} pCruiseResult
111
- * @param {*} pRevisionData
74
+ * @param {import("../..").IRevisionData} pRevisionData
112
75
  * @returns {import("../..").ICruiseResult}
113
76
  */
114
77
  function prepareRevisionDataForSaving(pCruiseResult, pRevisionData) {
package/src/cache/utl.js CHANGED
@@ -1,6 +1,8 @@
1
1
  const { createHash } = require("crypto");
2
2
  const { readFileSync } = require("fs");
3
+ const path = require("path");
3
4
  const memoize = require("lodash/memoize");
5
+ const { filenameMatchesPattern } = require("../graph-utl/match-facade");
4
6
 
5
7
  /**
6
8
  * @param {string} pString
@@ -22,4 +24,92 @@ function _getFileHash(pFileName) {
22
24
  }
23
25
  }
24
26
 
25
- module.exports = { getFileHash: memoize(_getFileHash) };
27
+ const getFileHash = memoize(_getFileHash);
28
+
29
+ /**
30
+ * @param {import("watskeburt").IChange} pChange
31
+ * @param {import("../..").IRevisionChange}
32
+ */
33
+ function addCheckSumToChange(pChange) {
34
+ return {
35
+ ...pChange,
36
+ checksum: getFileHash(pChange.name),
37
+ };
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param {import("../../types/strict-filter-types").IStrictExcludeType} pExcludeOption
43
+ * @returns {(pFileName: string) => boolean}
44
+ */
45
+ function excludeFilter(pExcludeOption) {
46
+ return (pFileName) => {
47
+ if (pExcludeOption.path) {
48
+ return !filenameMatchesPattern(pFileName, pExcludeOption.path);
49
+ }
50
+ return true;
51
+ };
52
+ }
53
+
54
+ /**
55
+ * @param {import("../../types/strict-filter-types").IStrictIncludeOnlyType} pIncludeOnlyFilter
56
+ * @returns {(pFileName: string) => boolean}
57
+ */
58
+ function includeOnlyFilter(pIncludeOnlyFilter) {
59
+ return (pFileName) => {
60
+ if (pIncludeOnlyFilter) {
61
+ return filenameMatchesPattern(pFileName, pIncludeOnlyFilter.path);
62
+ }
63
+ return true;
64
+ };
65
+ }
66
+ /**
67
+ * @param {Set<string>} pExtensions
68
+ * @returns {(pFileName: string) => boolean}
69
+ */
70
+ function hasInterestingExtension(pExtensions) {
71
+ return (pFileName) => pExtensions.has(path.extname(pFileName));
72
+ }
73
+
74
+ /**
75
+ * @param {Set<string>} pExtensions
76
+ * @returns {(pChange: import("watskeburt").IChange) => boolean}
77
+ */
78
+ function changeHasInterestingExtension(pExtensions) {
79
+ return (pChange) =>
80
+ hasInterestingExtension(pExtensions)(pChange.name) ||
81
+ (pChange.oldName && hasInterestingExtension(pExtensions)(pChange.oldName));
82
+ }
83
+
84
+ // skipping: "pairing broken", "unmodified", "unmerged", "type changed"
85
+ const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
86
+ "added",
87
+ "copied",
88
+ "deleted",
89
+ "ignored",
90
+ "modified",
91
+ "renamed",
92
+ "unmerged",
93
+ "untracked",
94
+ ]);
95
+
96
+ /**
97
+ * @param {Set<import("watskeburt").changeTypeType>} pInterestingChangeTypes
98
+ * @returns {(pChange: import("watskeburt").IChange) => boolean}
99
+ */
100
+ function isInterestingChangeType(pInterestingChangeTypes) {
101
+ return (pChange) =>
102
+ (pInterestingChangeTypes ?? DEFAULT_INTERESTING_CHANGE_TYPES).has(
103
+ pChange.changeType
104
+ );
105
+ }
106
+
107
+ module.exports = {
108
+ getFileHash,
109
+ excludeFilter,
110
+ includeOnlyFilter,
111
+ hasInterestingExtension,
112
+ changeHasInterestingExtension,
113
+ isInterestingChangeType,
114
+ addCheckSumToChange,
115
+ };
package/src/main/index.js CHANGED
@@ -63,9 +63,13 @@ function futureCruise(
63
63
  let lCache = null;
64
64
 
65
65
  if (lCruiseOptions.cache) {
66
- bus.emit("progress", "cache: checking freshness", c(2));
66
+ bus.emit(
67
+ "progress",
68
+ `cache: check freshness based on ${lCruiseOptions.cache.strategy}`,
69
+ c(2)
70
+ );
67
71
 
68
- lCache = new Cache(lCruiseOptions?.cache.strategy);
72
+ lCache = new Cache(lCruiseOptions.cache.strategy);
69
73
  const lCachedResults = lCache.read(lCruiseOptions.cache.folder);
70
74
 
71
75
  if (lCache.canServeFromCache(lCruiseOptions, lCachedResults)) {
package/src/meta.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /* generated - don't edit */
2
2
 
3
3
  module.exports = {
4
- version: "12.5.0-beta-1",
4
+ version: "12.5.0-beta-3",
5
5
  engines: {
6
6
  node: "^14||^16||>=18",
7
7
  },
@@ -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"}}}}}}}}
@@ -3,6 +3,10 @@ const { join } = require("path");
3
3
  const ignore = require("ignore");
4
4
  const pathToPosix = require("./path-to-posix");
5
5
 
6
+ /**
7
+ * @typedef {(pString:string, pIndex: number, pArray: string[]) => boolean} FilterFunctionType
8
+ */
9
+
6
10
  /**
7
11
  * @param {string} pFullPathToFile
8
12
  * @param {string} pBaseDirectory
@@ -19,13 +23,18 @@ function fileIsDirectory(pFullPathToFile, pBaseDirectory) {
19
23
 
20
24
  /**
21
25
  * @param {string} pDirectoryName
22
- * @param {{baseDir: string; ignoreFilterFn: (pString:string, pIndex: number, pArray: string[]) => boolean)}} pOptions
26
+ * @param {{baseDir: string; ignoreFilterFn: FilterFunctionType; excludeFilterFn: FilterFunctionType; includeOnlyFilterFn: FilterFunctionType}} pOptions
23
27
  * @returns {string[]}
24
28
  */
25
- function walk(pDirectoryName, { baseDir, ignoreFilterFn }) {
29
+ function walk(
30
+ pDirectoryName,
31
+ { baseDir, ignoreFilterFn, excludeFilterFn, includeOnlyFilterFn }
32
+ ) {
26
33
  return readdirSync(join(baseDir, pDirectoryName))
27
34
  .map((pFileName) => join(pDirectoryName, pFileName))
28
35
  .filter(ignoreFilterFn)
36
+ .filter(excludeFilterFn)
37
+ .filter(includeOnlyFilterFn)
29
38
  .map((pFullPathToFile) => ({
30
39
  fullPathToFile: pFullPathToFile,
31
40
  isDirectory: fileIsDirectory(pFullPathToFile, baseDir),
@@ -38,7 +47,14 @@ function walk(pDirectoryName, { baseDir, ignoreFilterFn }) {
38
47
  */
39
48
  (pSum, { fullPathToFile, isDirectory }) => {
40
49
  if (isDirectory) {
41
- return pSum.concat(walk(fullPathToFile, { baseDir, ignoreFilterFn }));
50
+ return pSum.concat(
51
+ walk(fullPathToFile, {
52
+ baseDir,
53
+ ignoreFilterFn,
54
+ excludeFilterFn,
55
+ includeOnlyFilterFn,
56
+ })
57
+ );
42
58
  }
43
59
  return pSum.concat(fullPathToFile);
44
60
  },
@@ -55,14 +71,28 @@ function readIgnoreFile(pFileName) {
55
71
  }
56
72
  }
57
73
 
74
+ /**
75
+ * @type FilterFunctionType
76
+ */
77
+ // eslint-disable-next-line no-unused-vars
78
+ function identityFilter(_pString, _pIndex, _pArray) {
79
+ return true;
80
+ }
81
+
58
82
  /**
59
83
  * @param {string} pDirectoryName
60
- * @param {{baseDir: string; ignoreFileContents?: string; additionalIgnorePatterns?: string[]}} pOptions
84
+ * @param {{baseDir: string; ignoreFileContents?: string; additionalIgnorePatterns?: string[]; excludeFilterFn: FilterFunctionType; includeOnlyFilterFn: FilterFunctionType}} pOptions
61
85
  * @returns {string[]}
62
86
  */
63
87
  module.exports = function findAllFiles(
64
88
  pDirectoryName,
65
- { baseDir, ignoreFileContents, additionalIgnorePatterns }
89
+ {
90
+ baseDir,
91
+ ignoreFileContents,
92
+ additionalIgnorePatterns,
93
+ excludeFilterFn,
94
+ includeOnlyFilterFn,
95
+ }
66
96
  ) {
67
97
  const lIgnoreFileContents =
68
98
  ignoreFileContents ?? readIgnoreFile(join(baseDir, ".gitignore"));
@@ -75,5 +105,7 @@ module.exports = function findAllFiles(
75
105
  return walk(pDirectoryName, {
76
106
  baseDir,
77
107
  ignoreFilterFn: lIgnoreFilterFunction,
108
+ excludeFilterFn: excludeFilterFn ?? identityFilter,
109
+ includeOnlyFilterFn: includeOnlyFilterFn ?? identityFilter,
78
110
  });
79
111
  };
@@ -6,7 +6,7 @@ import { IRuleSummary } from "./rule-summary";
6
6
  import { IChange } from "watskeburt";
7
7
 
8
8
  export interface IRevisionChange extends IChange {
9
- checkSum: string;
9
+ checksum: string;
10
10
  }
11
11
 
12
12
  /**