dependency-cruiser 12.3.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.
@@ -1,4 +1,4 @@
1
- const { objectsAreEqual } = require("./utl");
1
+ const { isDeepStrictEqual } = require("util");
2
2
 
3
3
  /*
4
4
  # command line options
@@ -6,7 +6,7 @@ const { objectsAreEqual } = require("./utl");
6
6
  -i, --info
7
7
  -V, --version
8
8
  -h, --help
9
- -T, --output-type <type> unless counting implicit shizzle like dependendents, metrics calculation
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>
@@ -55,11 +55,11 @@ const { objectsAreEqual } = require("./utl");
55
55
 
56
56
  function includeOnlyIsCompatible(pExistingFilter, pNewFilter) {
57
57
  return (
58
- !pExistingFilter || objectsAreEqual({ path: pExistingFilter }, pNewFilter)
58
+ !pExistingFilter || isDeepStrictEqual({ path: pExistingFilter }, pNewFilter)
59
59
  );
60
60
  }
61
- function optionIsCompatible(pExistingFilter, pNewFilter) {
62
- return !pExistingFilter || objectsAreEqual(pExistingFilter, pNewFilter);
61
+ function optionIsCompatible(pExistingOption, pNewOption) {
62
+ return !pExistingOption || isDeepStrictEqual(pExistingOption, pNewOption);
63
63
  }
64
64
 
65
65
  function limitIsCompatible(pExistingLimit, pNewLimit) {
@@ -70,6 +70,16 @@ function metricsIsCompatible(pExistingMetrics, pNewMetrics) {
70
70
  return pExistingMetrics || pExistingMetrics === pNewMetrics;
71
71
  }
72
72
 
73
+ function cacheOptionIsCompatible(pExistingCacheOption, pNewCacheOption) {
74
+ if (!pExistingCacheOption || !pNewCacheOption) {
75
+ return false;
76
+ }
77
+ return (
78
+ pExistingCacheOption === pNewCacheOption ||
79
+ isDeepStrictEqual(pExistingCacheOption, pNewCacheOption)
80
+ );
81
+ }
82
+
73
83
  /**
74
84
  *
75
85
  * @param {import("../../types/strict-options").IStrictCruiseOptions} pOldOptions
@@ -106,14 +116,16 @@ function optionsAreCompatible(pOldOptions, pNewOptions) {
106
116
  optionIsCompatible(
107
117
  pOldOptions.exoticRequireStrings,
108
118
  pNewOptions.exoticRequireStrings
109
- )
119
+ ) &&
120
+ cacheOptionIsCompatible(pOldOptions.cache, pNewOptions.cache)
110
121
  );
111
122
  }
112
123
 
113
124
  module.exports = {
114
125
  optionsAreCompatible,
115
- filtersAreCompatible: optionIsCompatible,
116
- limitsAreCompatible: limitIsCompatible,
117
- metricsAreCompatible: metricsIsCompatible,
118
- includeOnlyFiltersAreCompatible: includeOnlyIsCompatible,
126
+ optionIsCompatible,
127
+ limitIsCompatible,
128
+ metricsIsCompatible,
129
+ includeOnlyIsCompatible,
130
+ cacheOptionIsCompatible,
119
131
  };
package/src/cache/utl.js CHANGED
@@ -1,17 +1,25 @@
1
- const { deepEqual } = require("assert");
1
+ const { createHash } = require("crypto");
2
+ const { readFileSync } = require("fs");
3
+ const memoize = require("lodash/memoize");
2
4
 
3
5
  /**
4
- *
5
- * @param {any} pLeftObject
6
- * @param {any} pRightObject
7
- * @returns {boolean}
6
+ * @param {string} pString
7
+ * @returns {string}
8
8
  */
9
- function objectsAreEqual(pLeftObject, pRightObject) {
9
+ function hash(pString) {
10
+ return createHash("sha1").update(pString).digest("base64");
11
+ }
12
+
13
+ /**
14
+ * @param {import("fs").PathOrFileDescriptor} pFileName
15
+ * @returns {string}
16
+ */
17
+ function _getFileHash(pFileName) {
10
18
  try {
11
- deepEqual(pLeftObject, pRightObject);
12
- return true;
19
+ return hash(readFileSync(pFileName, "utf8"));
13
20
  } catch (pError) {
14
- return false;
21
+ return "file not found";
15
22
  }
16
23
  }
17
- module.exports = { objectsAreEqual };
24
+
25
+ module.exports = { getFileHash: memoize(_getFileHash) };
package/src/cli/index.js CHANGED
@@ -12,6 +12,7 @@ const extractTSConfig = require("../config-utl/extract-ts-config");
12
12
  const extractBabelConfig = require("../config-utl/extract-babel-config");
13
13
  const extractWebpackResolveConfig = require("../config-utl/extract-webpack-resolve-config");
14
14
  const extractKnownViolations = require("../config-utl/extract-known-violations");
15
+ const { INFO } = require("../utl/bus-log-levels");
15
16
  const validateFileExistence = require("./utl/validate-file-existence");
16
17
  const normalizeCliOptions = require("./normalize-cli-options");
17
18
  const io = require("./utl/io");
@@ -83,9 +84,12 @@ function setUpListener(pCruiseOptions) {
83
84
  pCruiseOptions?.ruleSet?.options?.progress?.type;
84
85
  // eslint-disable-next-line security/detect-object-injection
85
86
  const lListenerFunction = lString2Listener?.[lListenerID];
86
- /* c8 ignore next 3 */
87
+ /* c8 ignore next 6 */
87
88
  if (Boolean(lListenerFunction)) {
88
- lListenerFunction(bus);
89
+ lListenerFunction(
90
+ bus,
91
+ pCruiseOptions?.ruleSet?.options?.progress?.maximumLevel ?? INFO
92
+ );
89
93
  }
90
94
  }
91
95
 
@@ -116,7 +120,7 @@ function runCruise(pFileDirectoryArray, pCruiseOptions) {
116
120
  }
117
121
  );
118
122
 
119
- bus.emit("progress", "cli: writing results");
123
+ bus.emit("progress", "cli: writing results", { complete: 1 });
120
124
  bus.emit("write-start");
121
125
  io.write(lCruiseOptions.outputTo, lReportingResult.output);
122
126
 
@@ -1,67 +1,8 @@
1
1
  // @ts-check
2
2
  /* eslint-disable security/detect-object-injection */
3
- const fs = require("fs");
4
- const path = require("path");
5
- const pathToPosix = require("../../utl/path-to-posix");
6
3
  const getExtension = require("../../utl/get-extension.js");
7
4
  const meta = require("../../extract/transpile/meta");
8
-
9
- /**
10
- * @param {string[]} pIgnorablePathElements
11
- * @returns {(string) => boolean}
12
- */
13
- function notIgnorable(pIgnorablePathElements) {
14
- return (pPath) => {
15
- return !pIgnorablePathElements.includes(pPath);
16
- };
17
- }
18
-
19
- /**
20
- * @param {string} pFullPathToFile
21
- * @param {string} pBaseDirectory
22
- * @returns {boolean}
23
- */
24
- function fileIsDirectory(pFullPathToFile, pBaseDirectory) {
25
- try {
26
- const lStat = fs.statSync(path.join(pBaseDirectory, pFullPathToFile));
27
- return lStat.isDirectory();
28
- } catch (pError) {
29
- return false;
30
- }
31
- }
32
-
33
- /**
34
- * @param {string} pDirectoryName
35
- * @param {{baseDir: string; ignorablePathElements: string[]}} pOptions
36
- * @returns {string[]}
37
- */
38
- function listAllModules(pDirectoryName, { baseDir, ignorablePathElements }) {
39
- return fs
40
- .readdirSync(path.join(baseDir, pDirectoryName))
41
- .filter(notIgnorable(ignorablePathElements))
42
- .map((pFileName) => path.join(pDirectoryName, pFileName))
43
- .map((pFullPathToFile) => ({
44
- fullPathToFile: pFullPathToFile,
45
- isDirectory: fileIsDirectory(pFullPathToFile, baseDir),
46
- }))
47
- .reduce(
48
- /**
49
- * @param {string[]} pSum
50
- * @param {{fullPathToFile: string; isDirectory: boolean}} pCurrentValue
51
- * @returns {string[]}
52
- */
53
- (pSum, { fullPathToFile, isDirectory }) => {
54
- if (isDirectory) {
55
- return pSum.concat(
56
- listAllModules(fullPathToFile, { baseDir, ignorablePathElements })
57
- );
58
- }
59
- return pSum.concat(fullPathToFile);
60
- },
61
- []
62
- )
63
- .map((pFullPathToFile) => pathToPosix(pFullPathToFile));
64
- }
5
+ const findAllFiles = require("../../utl/find-all-files");
65
6
 
66
7
  /**
67
8
  * @param {Record<string,number>} pAll
@@ -84,27 +25,24 @@ function compareByCount(pCountsObject) {
84
25
 
85
26
  /**
86
27
  * @param {string[]} pDirectories
87
- * @param {{baseDir?: string; ignorablePathElements?: string[], scannableExtensions?: string[]}=} pOptions
28
+ * @param {{baseDir?: string; ignoreFileContents?: string}=} pOptions
88
29
  * @returns {string[]}
89
30
  */
90
31
  module.exports = function findExtensions(pDirectories, pOptions) {
91
32
  const lOptions = {
92
33
  baseDir: process.cwd(),
93
- ignorablePathElements: [
94
- ".git",
95
- ".husky",
96
- ".vscode",
97
- "coverage",
98
- "node_nodules",
99
- "nyc",
100
- ],
101
34
  scannableExtensions: meta.scannableExtensions,
102
35
  ...pOptions,
103
36
  };
104
37
 
105
38
  const lExtensionsWithCounts = pDirectories
106
39
  .flatMap((pDirectory) =>
107
- listAllModules(pDirectory, lOptions).map(getExtension).filter(Boolean)
40
+ findAllFiles(pDirectory, {
41
+ baseDir: lOptions.baseDir,
42
+ ignoreFileContents: lOptions?.ignoreFileContents,
43
+ })
44
+ .map(getExtension)
45
+ .filter(Boolean)
108
46
  )
109
47
  .reduce(reduceToCounts, {});
110
48
 
@@ -29,8 +29,11 @@ function populate(pInitOptions) {
29
29
  ),
30
30
  };
31
31
  if (lReturnValue.specifyResolutionExtensions) {
32
+ const lFoldersToScan = lReturnValue.sourceLocation.concat(
33
+ lReturnValue.testLocation
34
+ );
32
35
  lReturnValue.resolutionExtensions = findExtensions(
33
- lReturnValue.sourceLocation.concat(lReturnValue.testLocation)
36
+ lFoldersToScan.length > 0 ? lFoldersToScan : ["."]
34
37
  );
35
38
  }
36
39
  return lReturnValue;
@@ -1,6 +1,6 @@
1
1
  const chalk = require("chalk");
2
2
  const figures = require("figures");
3
- const busLogLevels = require("../../../utl/bus-log-levels");
3
+ const busLogLevels = require("../../utl/bus-log-levels");
4
4
 
5
5
  const FULL_ON = 100;
6
6
 
@@ -144,19 +144,6 @@ function normalizeProgress(pCliOptions) {
144
144
  return lProgress ? { progress: lProgress } : {};
145
145
  }
146
146
 
147
- function normalizeCacheFolderName(pCliOptions) {
148
- const lCache = get(pCliOptions, "cache", false);
149
- let lReturnValue = clone(pCliOptions);
150
-
151
- if (lCache === true) {
152
- lReturnValue = {
153
- ...lReturnValue,
154
- cache: defaults.CACHE_FOLDER,
155
- };
156
- }
157
- return lReturnValue;
158
- }
159
-
160
147
  /**
161
148
  * returns the pOptionsAsPassedFromCommander, so that the returned value contains a
162
149
  * valid value for each possible option
@@ -170,7 +157,6 @@ module.exports = function normalizeOptions(pOptionsAsPassedFromCommander) {
170
157
  outputTo: defaults.OUTPUT_TO,
171
158
  outputType: defaults.OUTPUT_TYPE,
172
159
  ...pOptionsAsPassedFromCommander,
173
- // ...ejectNonCLIOptions(pOptionsAsPassedFromCommander, pKnownCliOptions),
174
160
  };
175
161
 
176
162
  if (has(lOptions, "moduleSystems")) {
@@ -186,7 +172,6 @@ module.exports = function normalizeOptions(pOptionsAsPassedFromCommander) {
186
172
  lOptions = { ...lOptions, ...normalizeValidationOption(lOptions) };
187
173
  lOptions = { ...lOptions, ...normalizeProgress(lOptions) };
188
174
  lOptions = { ...lOptions, ...normalizeKnownViolationsOption(lOptions) };
189
- lOptions = normalizeCacheFolderName(lOptions);
190
175
  lOptions = normalizeConfigFileName(
191
176
  lOptions,
192
177
  "webpackConfig",
package/src/main/index.js CHANGED
@@ -6,8 +6,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 { canServeFromCache, readCache, writeCache } = require("../cache/cache");
10
- const { getRevisionData } = require("../cache/revision-data");
9
+ const Cache = require("../cache/cache");
11
10
  const normalizeFilesAndDirectories = require("./files-and-dirs/normalize");
12
11
  const validateRuleSet = require("./rule-set/validate");
13
12
  const normalizeRuleSet = require("./rule-set/normalize");
@@ -41,42 +40,36 @@ function format(pResult, pFormatOptions = {}) {
41
40
  return reportWrap(pResult, lFormatOptions);
42
41
  }
43
42
 
44
- const TOTAL_STEPS = 8;
43
+ const TOTAL_STEPS = 9;
45
44
 
46
45
  function c(pComplete, pTotal = TOTAL_STEPS) {
47
46
  return { complete: pComplete / pTotal };
48
47
  }
49
48
 
50
49
  /** @type {import("../..").futureCruise} */
51
- // eslint-disable-next-line max-lines-per-function, complexity, max-statements
50
+ // eslint-disable-next-line max-lines-per-function, max-statements
52
51
  function futureCruise(
53
52
  pFileAndDirectoryArray,
54
53
  pCruiseOptions,
55
54
  pResolveOptions,
56
55
  pTranspileOptions
57
56
  ) {
58
- /** @type {import("../../types/cruise-result").IRevisionData|null} */
59
- let lRevisionData = null;
60
-
61
57
  bus.emit("progress", "parsing options", c(1));
62
58
  /** @type {import("../../types/strict-options").IStrictCruiseOptions} */
63
59
  let lCruiseOptions = normalizeCruiseOptions(
64
60
  validateCruiseOptions(pCruiseOptions),
65
61
  pFileAndDirectoryArray
66
62
  );
63
+ let lCache = null;
67
64
 
68
65
  if (lCruiseOptions.cache) {
69
66
  bus.emit("progress", "cache: checking freshness", c(2));
70
- lRevisionData = getRevisionData(
71
- new Set(
72
- meta.scannableExtensions.concat(lCruiseOptions.extraExtensionsToScan)
73
- )
74
- );
75
- if (lRevisionData && canServeFromCache(lCruiseOptions, lRevisionData)) {
76
- bus.emit("progress", "cache: retrieving from cache", c(3));
77
- const lCachedResults = readCache(lCruiseOptions.cache);
78
67
 
79
- bus.emit("progress", "cache: reporting from cache", c(4));
68
+ lCache = new Cache(lCruiseOptions?.cache.strategy);
69
+ const lCachedResults = lCache.read(lCruiseOptions.cache.folder);
70
+
71
+ if (lCache.canServeFromCache(lCruiseOptions, lCachedResults)) {
72
+ bus.emit("progress", "cache: reporting from cache", c(8));
80
73
  return reportWrap(lCachedResults, lCruiseOptions);
81
74
  }
82
75
  }
@@ -114,17 +107,17 @@ function futureCruise(
114
107
  lNormalizedFileAndDirectoryArray
115
108
  );
116
109
 
117
- if (lCruiseOptions.cache && lRevisionData) {
118
- lCruiseResult.revisionData = lRevisionData;
119
- writeCache(lCruiseOptions.cache, lCruiseResult);
110
+ if (lCruiseOptions.cache) {
111
+ bus.emit("progress", "cache: saving", c(7));
112
+ lCache.write(lCruiseOptions.cache.folder, lCruiseResult);
120
113
  }
121
114
 
122
- bus.emit("progress", "reporting", c(7));
115
+ bus.emit("progress", "reporting", c(8));
123
116
  return reportWrap(lCruiseResult, lCruiseOptions);
124
117
  }
125
118
 
126
119
  // see [api.md](../../doc/api.md) and/ or the
127
- // [type definition](../...d.ts) for details
120
+ // [type definition](../../types/dependency-cruiser.d.ts) for details
128
121
  /** @type {import("../..").cruise} */
129
122
  function cruise(pFileAndDirectoryArray, pOptions, pResolveOptions, pTSConfig) {
130
123
  return futureCruise(pFileAndDirectoryArray, pOptions, pResolveOptions, {
@@ -5,6 +5,9 @@ const has = require("lodash/has");
5
5
  const { normalizeREProperties } = require("../utl/normalize-re-properties");
6
6
  const defaults = require("./defaults.js");
7
7
 
8
+ const DEFAULT_CACHE_FOLDER = "node_modules/.cache/dependency-cruiser";
9
+ const DEFAULT_CACHE_STRATEGY = "metadata";
10
+
8
11
  function uniq(pArray) {
9
12
  return [...new Set(pArray)];
10
13
  }
@@ -139,6 +142,33 @@ function shouldCalculateMetrics(pOptions) {
139
142
  );
140
143
  }
141
144
 
145
+ /**
146
+ * @param {string|boolean|Partial<import("../../../types/cache-options").ICacheOptions>} pCacheOptions
147
+ * @returns {import("../../../types/cache-options").ICacheOptions}
148
+ */
149
+ function normalizeCacheOptions(pCacheOptions) {
150
+ let lNormalizedCacheOptions = pCacheOptions;
151
+
152
+ if (typeof pCacheOptions === "string") {
153
+ lNormalizedCacheOptions = {
154
+ folder: pCacheOptions,
155
+ };
156
+ }
157
+
158
+ if (pCacheOptions === true) {
159
+ lNormalizedCacheOptions = {};
160
+ }
161
+
162
+ // TODO: put these values in a central spot as constants
163
+ // (folder is already in src/cli/defaults.js but depending on the UI (cli)
164
+ // is not OK. We might b.t.w. wanna deduplicate the defaulting)
165
+ return {
166
+ folder: DEFAULT_CACHE_FOLDER,
167
+ strategy: DEFAULT_CACHE_STRATEGY,
168
+ ...lNormalizedCacheOptions,
169
+ };
170
+ }
171
+
142
172
  /**
143
173
  *
144
174
  * @param {import('../../../types/options').ICruiseOptions} pOptions
@@ -186,6 +216,9 @@ function normalizeCruiseOptions(pOptions, pFileAndDirectoryArray = []) {
186
216
  // if (has(pOptions, "ruleSet")) {
187
217
  // lReturnValue.ruleSet = normalizeRuleSet(pOptions.ruleSet);
188
218
  // }
219
+ if (lReturnValue.cache) {
220
+ lReturnValue.cache = normalizeCacheOptions(lReturnValue.cache);
221
+ }
189
222
 
190
223
  return normalizeFocusDepth(lReturnValue);
191
224
  }
package/src/meta.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /* generated - don't edit */
2
2
 
3
3
  module.exports = {
4
- version: "12.3.0",
4
+ version: "12.5.0-beta-1",
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 configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"reaches":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundReachesType"}]},"highlight":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundHighlightType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean","enum":[false]},{"type":"string"}]}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
2
+ module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"scope":{"type":"string","enum":["module","folder"]},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaOnly":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"viaSomeNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"reaches":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundReachesType"}]},"highlight":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundHighlightType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]},"maximumLevel":{"type":"number","enum":[-1,40,50,60,70,80,99]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"cache":{"oneOf":[{"type":"boolean"},{"type":"string"},{"$ref":"#/definitions/CacheOptionsType"}]}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"depth":{"type":"number","minimum":1,"maximum":4}}},"CompoundReachesType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundHighlightType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"markdown":{"$ref":"#/definitions/MarkdownReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"},"mermaid":{"$ref":"#/definitions/MermaidReporterOptionsType"},"text":{"$ref":"#/definitions/TextReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"MarkdownReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"showTitle":{"type":"boolean"},"title":{"type":"string"},"showSummary":{"type":"boolean"},"showSummaryHeader":{"type":"boolean"},"summaryHeader":{"type":"string"},"showStatsSummary":{"type":"boolean"},"showRulesSummary":{"type":"boolean"},"includeIgnoredInSummary":{"type":"boolean"},"showDetails":{"type":"boolean"},"includeIgnoredInDetails":{"type":"boolean"},"showDetailsHeader":{"type":"boolean"},"detailsHeader":{"type":"string"},"collapseDetails":{"type":"boolean"},"collapsedMessage":{"type":"string"},"noViolationsMessage":{"type":"string"},"showFooter":{"type":"boolean"}}},"MermaidReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"minify":{"type":"boolean"}}},"TextReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"highlightFocused":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"},"reaches":{"$ref":"#/definitions/CompoundReachesType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}},"comment":{"type":"string"}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"CacheOptionsType":{"type":"object","additionalProperties":false,"properties":{"folder":{"type":"string"},"strategy":{"$ref":"#/definitions/CacheStrategyType"}}},"CacheStrategyType":{"type":"string","enum":["metadata","content"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}