dependency-cruiser 11.2.1 → 11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016-2021 Sander Verweij
3
+ Copyright (c) 2016-2022 Sander Verweij
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dependency-cruiser",
3
- "version": "11.2.1",
3
+ "version": "11.3.0",
4
4
  "description": "Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.",
5
5
  "keywords": [
6
6
  "static analysis",
@@ -113,8 +113,11 @@
113
113
  "scm:push:gitlab-mirror:tags": "git push --tags gitlab-mirror",
114
114
  "scm:stage": "git add .",
115
115
  "test": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\"",
116
+ "test:i": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\" -g \"^\\[[I]\\]\"",
117
+ "test:u": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\" --grep \"^\\[[U]\\]\"",
118
+ "test:e": "mocha --timeout 4000 \"test/**/*.spec.{js,mjs,cjs}\" --grep \"^\\[[E]\\]\"",
116
119
  "test:cover": "c8 --check-coverage --statements 99.9 --branches 99.7 --functions 100 --lines 99.9 --exclude \"{bin,configs,doc,docs,coverage,test,tools,webpack.conf.js,tmp*,src/**/*.template.js,src/cli/tools/svg-in-html-snippets/script.snippet.js,src/cli/init-config/get-user-input.js,src/cli/listeners/*/index.js}\" --reporter text-summary --reporter html --reporter json-summary npm test",
117
- "test:glob": "set -f && test \"`bin/dependency-cruise.js test/extract/fixtures/gather-globbing/packages/**/src/**/*.js | grep \"no dependency violations found\"`\" = \"✔ no dependency violations found (6 modules, 0 dependencies cruised)\"",
120
+ "test:glob": "set -f && test \"`bin/dependency-cruise.js test/extract/__mocks__/gather-globbing/packages/**/src/**/*.js | grep \"no dependency violations found\"`\" = \"✔ no dependency violations found (6 modules, 0 dependencies cruised)\"",
118
121
  "test:yarn-pnp": "npm-run-all test:yarn-pnp:cleanup test:yarn-pnp:pack test:yarn-pnp:copy test:yarn-pnp:install test:yarn-pnp:version test:yarn-pnp:run test:yarn-pnp:test test:yarn-pnp:cleanup",
119
122
  "test:yarn-pnp:pack": "npm pack",
120
123
  "test:yarn-pnp:copy": "shx cp -r test/integration/yarn-pnp.template test/integration/yarn-pnp.testing-ground",
@@ -132,12 +135,12 @@
132
135
  "version": "npm-run-all build depcruise:graph:doc scm:stage"
133
136
  },
134
137
  "dependencies": {
135
- "acorn": "8.6.0",
138
+ "acorn": "8.7.0",
136
139
  "acorn-jsx": "5.3.2",
137
140
  "acorn-jsx-walk": "2.0.0",
138
- "acorn-loose": "8.2.1",
141
+ "acorn-loose": "8.3.0",
139
142
  "acorn-walk": "8.2.0",
140
- "ajv": "8.8.2",
143
+ "ajv": "8.9.0",
141
144
  "chalk": "^4.1.2",
142
145
  "commander": "8.3.0",
143
146
  "enhanced-resolve": "5.8.3",
@@ -157,14 +160,14 @@
157
160
  "wrap-ansi": "^7.0.0"
158
161
  },
159
162
  "devDependencies": {
160
- "@babel/core": "7.16.5",
161
- "@babel/plugin-transform-modules-commonjs": "7.16.5",
162
- "@babel/preset-typescript": "7.16.5",
163
- "@swc/core": "1.2.123",
164
- "@typescript-eslint/eslint-plugin": "5.8.0",
165
- "@typescript-eslint/parser": "5.8.0",
166
- "@vue/compiler-sfc": "3.2.26",
167
- "c8": "7.10.0",
163
+ "@babel/core": "7.16.12",
164
+ "@babel/plugin-transform-modules-commonjs": "7.16.8",
165
+ "@babel/preset-typescript": "7.16.7",
166
+ "@swc/core": "1.2.133",
167
+ "@typescript-eslint/eslint-plugin": "5.10.0",
168
+ "@typescript-eslint/parser": "5.10.0",
169
+ "@vue/compiler-sfc": "3.2.28",
170
+ "c8": "7.11.0",
168
171
  "chai": "4.3.4",
169
172
  "chai-json-schema": "1.5.1",
170
173
  "coffeescript": "2.6.1",
@@ -172,23 +175,23 @@
172
175
  "eslint-config-moving-meadow": "2.0.9",
173
176
  "eslint-config-prettier": "8.3.0",
174
177
  "eslint-plugin-budapestian": "3.0.1",
175
- "eslint-plugin-import": "2.25.3",
178
+ "eslint-plugin-import": "2.25.4",
176
179
  "eslint-plugin-mocha": "^9.0.0",
177
180
  "eslint-plugin-node": "11.1.0",
178
181
  "eslint-plugin-security": "1.4.0",
179
- "eslint-plugin-unicorn": "39.0.0",
182
+ "eslint-plugin-unicorn": "40.1.0",
180
183
  "husky": "^4.3.8",
181
184
  "intercept-stdout": "0.1.2",
182
- "lint-staged": "12.1.4",
183
- "mocha": "9.1.3",
185
+ "lint-staged": "12.3.0",
186
+ "mocha": "9.1.4",
184
187
  "normalize-newline": "^3.0.0",
185
188
  "npm-run-all": "4.1.5",
186
189
  "prettier": "2.5.1",
187
190
  "proxyquire": "2.1.3",
188
- "shx": "0.3.3",
189
- "svelte": "3.44.3",
191
+ "shx": "0.3.4",
192
+ "svelte": "3.46.2",
190
193
  "symlink-dir": "5.0.1",
191
- "typescript": "4.5.4",
194
+ "typescript": "4.5.5",
192
195
  "upem": "^7.0.0",
193
196
  "vue-template-compiler": "2.6.14",
194
197
  "yarn": "1.22.17"
@@ -247,10 +250,11 @@
247
250
  "src/**/*.template.js",
248
251
  "src/cli/tools/svg-in-html-snippets/script.snippet.js",
249
252
  "test/integration/**",
250
- "test/*/fixtures/**",
251
- "test/*/*/fixtures/**",
252
- "test/*/mocks/**",
253
- "test/*/*/mocks/**",
253
+ "test/*/__fixtures__/**",
254
+ "test/*/*/__fixtures__/**",
255
+ "test/*/*/*/__fixtures__/**",
256
+ "test/*/__mocks__/**",
257
+ "test/*/*/__mocks__/**",
254
258
  "types/**"
255
259
  ],
256
260
  "engines": {
@@ -283,13 +287,13 @@
283
287
  "eslint --fix",
284
288
  "prettier --write"
285
289
  ],
286
- "test/**/*.{utl,spec}.{mjs,js}": [
290
+ "test/**/*.{utl,spec}.{mjs,cjs}": [
287
291
  "eslint --fix",
288
292
  "prettier --write"
289
293
  ],
290
- "*.d.ts": [
294
+ "types/**/*.d.ts": [
291
295
  "eslint --config types/.eslintrc.json --fix",
292
- "prettier --write --ignore-path .prettierignore"
296
+ "prettier --write"
293
297
  ]
294
298
  }
295
299
  }
@@ -84,8 +84,8 @@ function findFolderByName(pAllFolders, pName) {
84
84
  return pAllFolders.find((pFolder) => pFolder.name === pName);
85
85
  }
86
86
 
87
- function denormalizeInstability(pAllFolders) {
88
- return (pFolder) => ({
87
+ function denormalizeInstability(pFolder, _, pAllFolders) {
88
+ return {
89
89
  ...pFolder,
90
90
  dependencies: pFolder.dependencies.map((pDependency) => {
91
91
  const lFolder = findFolderByName(pAllFolders, pDependency.name) || {};
@@ -94,7 +94,7 @@ function denormalizeInstability(pAllFolders) {
94
94
  instability: lFolder.instability >= 0 ? lFolder.instability : 0,
95
95
  };
96
96
  }),
97
- });
97
+ };
98
98
  }
99
99
 
100
100
  module.exports = function aggregateToFolders(pModules) {
@@ -102,5 +102,5 @@ module.exports = function aggregateToFolders(pModules) {
102
102
  pModules.filter(metricsAreCalculable).reduce(aggregateToFolder, {})
103
103
  ).map(calculateFolderMetrics);
104
104
 
105
- return lFolders.map(denormalizeInstability(lFolders));
105
+ return lFolders.map(denormalizeInstability);
106
106
  };
@@ -1,9 +1,46 @@
1
+ const validate = require("../../../validate");
1
2
  const aggregateToFolders = require("./aggregate-to-folders");
2
3
 
4
+ /**
5
+ *
6
+ * @param {*} pFolder
7
+ * @param {import('../../../../types/dependency-cruiser').IOptions} pOptions
8
+ * @returns
9
+ */
10
+ function validateFolderDependency(pFolder, pOptions) {
11
+ return (pDependency) => {
12
+ return {
13
+ ...pDependency,
14
+ ...validate.folder(pOptions.ruleSet || {}, pFolder, pDependency),
15
+ };
16
+ };
17
+ }
18
+
19
+ function addFolderDependencyViolations(pOptions) {
20
+ return (pFolder) => {
21
+ return {
22
+ ...pFolder,
23
+ dependencies: pFolder.dependencies.map(
24
+ validateFolderDependency(pFolder, pOptions)
25
+ ),
26
+ };
27
+ };
28
+ }
29
+
30
+ /**
31
+ *
32
+ * @param {import('../../../../types/dependency-cruiser').IModule[]} pModules
33
+ * @param {import('../../../../types/dependency-cruiser').IOptions} pOptions
34
+ * @returns {any}
35
+ */
3
36
  module.exports = function deriveFolderMetrics(pModules, pOptions) {
4
37
  let lReturnValue = {};
5
38
  if (pOptions.metrics) {
6
- lReturnValue = { folders: aggregateToFolders(pModules) };
39
+ lReturnValue = {
40
+ folders: aggregateToFolders(pModules).map(
41
+ addFolderDependencyViolations(pOptions)
42
+ ),
43
+ };
7
44
  }
8
45
  return lReturnValue;
9
46
  };
@@ -6,11 +6,19 @@ const clearCaches = require("./clear-caches");
6
6
  module.exports = function enrich(pModules, pOptions, pFileAndDirectoryArray) {
7
7
  clearCaches();
8
8
  const lModules = enrichModules(pModules, pOptions);
9
+ const lFolders = aggregateToFolders(lModules, pOptions);
9
10
 
10
11
  clearCaches();
11
- return {
12
+ const lReturnValue = {
12
13
  modules: lModules,
13
- ...aggregateToFolders(lModules, pOptions),
14
- summary: summarize(lModules, pOptions, pFileAndDirectoryArray),
14
+ ...lFolders,
15
+ summary: summarize(
16
+ lModules,
17
+ pOptions,
18
+ pFileAndDirectoryArray,
19
+ lFolders.folders
20
+ ),
15
21
  };
22
+
23
+ return lReturnValue;
16
24
  };
@@ -0,0 +1,31 @@
1
+ function getViolationStats(pViolations) {
2
+ return pViolations.reduce(
3
+ (pAll, pThis) => {
4
+ pAll[pThis.rule.severity] += 1;
5
+ return pAll;
6
+ },
7
+ {
8
+ error: 0,
9
+ warn: 0,
10
+ info: 0,
11
+ ignore: 0,
12
+ }
13
+ );
14
+ }
15
+
16
+ function getModulesCruised(pModules) {
17
+ return pModules.length;
18
+ }
19
+
20
+ function getDependenciesCruised(pModules) {
21
+ return pModules.reduce(
22
+ (pAll, pModule) => pAll + pModule.dependencies.length,
23
+ 0
24
+ );
25
+ }
26
+
27
+ module.exports = {
28
+ getViolationStats,
29
+ getModulesCruised,
30
+ getDependenciesCruised,
31
+ };
@@ -1,6 +1,12 @@
1
1
  const addRuleSetUsed = require("./add-rule-set-used");
2
2
  const summarizeModules = require("./summarize-modules");
3
+ const summarizeFolders = require("./summarize-folders");
3
4
  const summarizeOptions = require("./summarize-options");
5
+ const {
6
+ getViolationStats,
7
+ getModulesCruised,
8
+ getDependenciesCruised,
9
+ } = require("./get-stats");
4
10
 
5
11
  /**
6
12
  *
@@ -8,17 +14,30 @@ const summarizeOptions = require("./summarize-options");
8
14
  * cruised modules that have been enriched with mandatory attributes &
9
15
  * have been validated against rules as passed in the options
10
16
  * @param {import("../../../types/options").ICruiseOptions} pOptions -
11
- *
12
17
  * @param {string[]} pFileDirectoryArray -
13
18
  * the files/ directories originally passed to be cruised
19
+ * @param {import("../../../types/dependency-cruiser").IFolder[]} pFolders -
20
+ * the pModules collapsed to folders, with their own metrics & deps
14
21
  *
15
22
  * @returns {import("../../../types/cruise-result").ISummary} -
16
23
  * a summary of the found modules, dependencies and any violations
17
24
  */
18
- module.exports = function makeSummary(pModules, pOptions, pFileDirectoryArray) {
19
- return Object.assign(
20
- summarizeModules(pModules, pOptions.ruleSet),
21
- summarizeOptions(pFileDirectoryArray, pOptions),
22
- pOptions.ruleSet ? { ruleSetUsed: addRuleSetUsed(pOptions) } : {}
25
+ module.exports = function summarize(
26
+ pModules,
27
+ pOptions,
28
+ pFileDirectoryArray,
29
+ pFolders
30
+ ) {
31
+ const lViolations = summarizeModules(pModules, pOptions.ruleSet).concat(
32
+ summarizeFolders(pFolders || [], pOptions.ruleSet)
23
33
  );
34
+
35
+ return {
36
+ violations: lViolations,
37
+ ...getViolationStats(lViolations),
38
+ totalCruised: getModulesCruised(pModules),
39
+ totalDependenciesCruised: getDependenciesCruised(pModules),
40
+ ...summarizeOptions(pFileDirectoryArray, pOptions),
41
+ ...(pOptions.ruleSet ? { ruleSetUsed: addRuleSetUsed(pOptions) } : {}),
42
+ };
24
43
  };
@@ -0,0 +1,38 @@
1
+ const _has = require("lodash/has");
2
+ const { findRuleByName } = require("../../graph-utl/rule-set");
3
+
4
+ function classifyViolation(pRule, pRuleSet) {
5
+ if (_has(findRuleByName(pRuleSet, pRule.name), "to.moreUnstable")) {
6
+ return "instability";
7
+ }
8
+ return "folder";
9
+ }
10
+
11
+ function getViolations(pFolder, pRuleSet) {
12
+ return pFolder.dependencies
13
+ .filter((pDependency) => !pDependency.valid)
14
+ .flatMap((pDependency) =>
15
+ pDependency.rules.map((pRule) => {
16
+ const lViolationType = classifyViolation(pRule, pRuleSet);
17
+
18
+ return {
19
+ type: lViolationType,
20
+ from: pFolder.name,
21
+ to: pDependency.name,
22
+ rule: pRule,
23
+ ...(lViolationType === "instability"
24
+ ? {
25
+ metrics: {
26
+ from: { instability: pFolder.instability },
27
+ to: { instability: pDependency.instability },
28
+ },
29
+ }
30
+ : {}),
31
+ };
32
+ })
33
+ );
34
+ }
35
+
36
+ module.exports = function summarizeFolders(pFolders, pRuleSet) {
37
+ return pFolders.flatMap((pFolder) => getViolations(pFolder, pRuleSet));
38
+ };
@@ -15,20 +15,6 @@ function cutNonTransgressions(pModule) {
15
15
  };
16
16
  }
17
17
 
18
- function extractMetaData(pViolations) {
19
- return pViolations.reduce(
20
- (pAll, pThis) => {
21
- pAll[pThis.rule.severity] += 1;
22
- return pAll;
23
- },
24
- {
25
- error: 0,
26
- warn: 0,
27
- info: 0,
28
- ignore: 0,
29
- }
30
- );
31
- }
32
18
  function toDependencyViolationSummary(pRule, pModule, pDependency, pRuleSet) {
33
19
  let lReturnValue = {
34
20
  type: "dependency",
@@ -149,22 +135,10 @@ function extractModuleViolations(pModules, pRuleSet) {
149
135
  }
150
136
 
151
137
  module.exports = function summarizeModules(pModules, pRuleSet) {
152
- const lViolations = _uniqWith(
138
+ return _uniqWith(
153
139
  extractDependencyViolations(pModules, pRuleSet)
154
140
  .concat(extractModuleViolations(pModules, pRuleSet))
155
141
  .sort(compare.violations),
156
142
  isSameViolation
157
143
  );
158
-
159
- return {
160
- violations: lViolations,
161
- ...extractMetaData(lViolations),
162
- totalCruised: pModules.length,
163
- totalDependenciesCruised: pModules.reduce(
164
- (pAll, pModule) => pAll + pModule.dependencies.length,
165
- 0
166
- ),
167
- };
168
144
  };
169
-
170
- module.exports.extractModuleViolations = extractModuleViolations;
@@ -29,23 +29,27 @@ const SHAREABLE_OPTIONS = [
29
29
 
30
30
  function makeOptionsPresentable(pOptions) {
31
31
  return SHAREABLE_OPTIONS.filter(
32
- (pOption) => _has(pOptions, pOption) && pOptions[pOption] !== 0
32
+ (pShareableOptionKey) =>
33
+ _has(pOptions, pShareableOptionKey) && pOptions[pShareableOptionKey] !== 0
33
34
  )
34
35
  .filter(
35
- (pOption) =>
36
- pOption !== "doNotFollow" ||
36
+ (pShareableOptionKey) =>
37
+ pShareableOptionKey !== "doNotFollow" ||
37
38
  Object.keys(pOptions.doNotFollow).length > 0
38
39
  )
39
40
  .filter(
40
- (pOption) =>
41
- pOption !== "exclude" || Object.keys(pOptions.exclude).length > 0
41
+ (pShareableOptionKey) =>
42
+ pShareableOptionKey !== "exclude" ||
43
+ Object.keys(pOptions.exclude).length > 0
42
44
  )
43
45
  .filter(
44
- (pOption) =>
45
- pOption !== "knownViolations" || pOptions.knownViolations.length > 0
46
+ (pShareableOptionKey) =>
47
+ pShareableOptionKey !== "knownViolations" ||
48
+ pOptions.knownViolations.length > 0
46
49
  )
47
- .reduce((pAll, pOption) => {
48
- pAll[pOption] = pOptions[pOption];
50
+ .reduce((pAll, pShareableOptionKey) => {
51
+ // console.error(pOption);
52
+ pAll[pShareableOptionKey] = pOptions[pShareableOptionKey];
49
53
  return pAll;
50
54
  }, {});
51
55
  }
@@ -77,11 +77,35 @@ function extractExoticMemberCallExpression(pNode, pExoticRequireStrings) {
77
77
  return lReturnValue;
78
78
  }
79
79
 
80
+ function isImportCallExpression(pNode) {
81
+ /*
82
+ somewhere between swc 1.2.123 and 1.2.133 the swc AST started to
83
+ represent import call expressions with .callee.type === "Import"
84
+ instead of .callee.value === "import". Keeping both detection
85
+ methods in here for backwards compatiblity
86
+ */
87
+ return pNode.callee.value === "import" || pNode.callee.type === "Import";
88
+ }
89
+
90
+ function isNonExoticallyRequiredExpression(pNode) {
91
+ return pNode.callee.value === "require" || isImportCallExpression(pNode);
92
+ }
93
+
80
94
  function isInterestingCallExpression(pExoticRequireStrings, pNode) {
81
- return ["require", "import"]
82
- .concat(pExoticRequireStrings.filter((pString) => !pString.includes(".")))
83
- .includes(pNode.callee.value);
95
+ /*
96
+ somewhere between swc 1.2.123 and 1.2.133 the swc AST started to
97
+ represent import call expressions with .callee.type === "Import"
98
+ instead of .callee.value === "import". Keeping both detection
99
+ methods in here for backwards compatiblity
100
+ */
101
+ return (
102
+ pNode.callee.type === "Import" ||
103
+ ["require", "import"]
104
+ .concat(pExoticRequireStrings.filter((pString) => !pString.includes(".")))
105
+ .includes(pNode.callee.value)
106
+ );
84
107
  }
108
+
85
109
  if (VisitorModule) {
86
110
  module.exports = class SwcDependencyVisitor extends Visitor {
87
111
  constructor(pExoticRequireStrings) {
@@ -159,11 +183,11 @@ if (VisitorModule) {
159
183
  this.lResult.push({
160
184
  module: pryStringsFromArguments(pNode.arguments),
161
185
 
162
- ...(pNode.callee.value === "import"
186
+ ...(isImportCallExpression(pNode)
163
187
  ? { moduleSystem: "es6", dynamic: true }
164
188
  : { moduleSystem: "cjs", dynamic: false }),
165
189
 
166
- ...(["require", "import"].includes(pNode.callee.value)
190
+ ...(isNonExoticallyRequiredExpression(pNode)
167
191
  ? { exoticallyRequired: false }
168
192
  : { exoticallyRequired: true, exoticRequire: pNode.callee.value }),
169
193
  });
@@ -1,3 +1,4 @@
1
+ const { EOL } = require("os");
1
2
  const isEmpty = require("lodash/isEmpty");
2
3
  const _get = require("lodash/get");
3
4
  const tryRequire = require("semver-try-require");
@@ -40,7 +41,18 @@ function vue3Transpile(pSource) {
40
41
  return "";
41
42
  }
42
43
 
43
- return _get(parsedComponent, "descriptor.script.content", "");
44
+ const scriptContent = _get(parsedComponent, "descriptor.script.content", "");
45
+ const scriptSetupContent = _get(
46
+ parsedComponent,
47
+ "descriptor.scriptSetup.content",
48
+ ""
49
+ );
50
+
51
+ if (scriptContent && scriptSetupContent) {
52
+ return scriptContent + EOL + scriptSetupContent;
53
+ }
54
+
55
+ return scriptContent || scriptSetupContent;
44
56
  }
45
57
 
46
58
  function vue2Transpile(pSource) {
@@ -1,12 +1,18 @@
1
1
  const _get = require("lodash/get");
2
2
  const _has = require("lodash/has");
3
3
  const filterbank = require("../graph-utl/filterbank");
4
- const summarizeModules = require("../enrich/summarize/summarize-modules");
4
+ const summarize = require("../enrich/summarize");
5
5
  const consolidateToPattern = require("../graph-utl/consolidate-to-pattern");
6
6
  const compare = require("../graph-utl/compare");
7
7
  const stripSelfTransitions = require("../graph-utl/strip-self-transitions");
8
8
  const report = require("../report");
9
9
 
10
+ /**
11
+ *
12
+ * @param {import('../../types/dependency-cruiser').ICruiseResult} pResult
13
+ * @param {import('../../types/dependency-cruiser').IFormatOptions} pFormatOptions
14
+ * @returns {import('../../types/dependency-cruiser').ICruiseResult}
15
+ */
10
16
  function reSummarizeResults(pResult, pFormatOptions) {
11
17
  let lModules = filterbank.applyFilters(pResult.modules, pFormatOptions);
12
18
 
@@ -15,12 +21,20 @@ function reSummarizeResults(pResult, pFormatOptions) {
15
21
  .sort(compare.modules)
16
22
  .map(stripSelfTransitions);
17
23
  }
18
-
19
24
  return {
20
25
  ...pResult,
21
26
  summary: {
22
27
  ...pResult.summary,
23
- ...summarizeModules(lModules, _get(pResult, "summary.ruleSetUsed", {})),
28
+ ...summarize(
29
+ lModules,
30
+ {
31
+ ...pResult.summary.optionsUsed,
32
+ ...pFormatOptions,
33
+ },
34
+ (pResult.summary.optionsUsed.args || "").split(" "),
35
+ // TODO: apply filters to the folders too
36
+ pResult.folders
37
+ ),
24
38
  },
25
39
  modules: lModules,
26
40
  };
package/src/meta.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /* generated - don't edit */
2
2
 
3
3
  module.exports = {
4
- version: "11.2.1",
4
+ version: "11.3.0",
5
5
  engines: {
6
6
  node: "^12.20||^14||>=16",
7
7
  },
@@ -1,2 +1,2 @@
1
1
  /* generated - don't edit */
2
- module.exports={"title":"dependency-cruiser baseline ('known errors') format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/baseline-violations.schema.json","$ref":"#/definitions/ViolationsType","definitions":{"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability"]}}}
2
+ module.exports={"title":"dependency-cruiser baseline ('known errors') format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/baseline-violations.schema.json","$ref":"#/definitions/ViolationsType","definitions":{"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]}}}
@@ -1,2 +1,2 @@
1
1
  /* generated - don't edit */
2
- module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
2
+ module.exports={"title":"dependency-cruiser configuration","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/configuration.schema.json","type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}},"options":{"$ref":"#/definitions/OptionsType"},"extends":{"$ref":"#/definitions/ExtendsType"}},"definitions":{"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"OptionsType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundDoNotFollowType"}]},"exclude":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundExcludeType"}]},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundFocusType"}]},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"oneOf":[{"type":"string"},{"type":"integer","minimum":1,"maximum":9}]},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"}}},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}}}},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"ExtendsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}
@@ -1,2 +1,2 @@
1
1
  /* generated - don't edit */
2
- module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}}}}
2
+ module.exports={"title":"dependency-cruiser output format","$schema":"http://json-schema.org/draft-07/schema#","$id":"https://dependency-cruiser.js.org/schema/cruise-result.schema.json","type":"object","required":["summary","modules"],"additionalProperties":false,"properties":{"modules":{"$ref":"#/definitions/ModulesType"},"folders":{"$ref":"#/definitions/FoldersType"},"summary":{"$ref":"#/definitions/SummaryType"}},"definitions":{"ModulesType":{"type":"array","items":{"$ref":"#/definitions/ModuleType"}},"ModuleType":{"type":"object","required":["source","dependencies","valid"],"additionalProperties":false,"properties":{"source":{"type":"string"},"valid":{"type":"boolean"},"dependencies":{"$ref":"#/definitions/DependenciesType"},"dependents":{"type":"array","items":{"type":"string"}},"followable":{"type":"boolean"},"matchesDoNotFollow":{"type":"boolean"},"matchesFocus":{"type":"boolean"},"coreModule":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"orphan":{"type":"boolean"},"reachable":{"type":"array","items":{"$ref":"#/definitions/ReachableType"}},"reaches":{"type":"array","items":{"$ref":"#/definitions/ReachesType"}},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"consolidated":{"type":"boolean"},"instability":{"type":"number"}}},"ReachableType":{"type":"object","required":["value","asDefinedInRule","matchedFrom"],"additionalProperties":false,"properties":{"value":{"type":"boolean"},"asDefinedInRule":{"type":"string"},"matchedFrom":{"type":"string"}}},"ReachesType":{"type":"object","required":["modules","asDefinedInRule"],"additionalProperties":false,"properties":{"modules":{"type":"array","items":{"type":"object","required":["source","via"],"additionalProperties":false,"properties":{"source":{"type":"string"},"via":{"type":"array","items":{"type":"string"}}}}},"asDefinedInRule":{"type":"string"}}},"DependenciesType":{"type":"array","items":{"$ref":"#/definitions/DependencyType"}},"DependencyType":{"type":"object","required":["circular","coreModule","couldNotResolve","dependencyTypes","exoticallyRequired","dynamic","followable","module","moduleSystem","resolved","valid"],"additionalProperties":false,"properties":{"module":{"type":"string"},"protocol":{"type":"string","enum":["data:","file:","node:"]},"mimeType":{"type":"string"},"resolved":{"type":"string"},"coreModule":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"license":{"type":"string"},"followable":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"type":"string"},"matchesDoNotFollow":{"type":"boolean"},"couldNotResolve":{"type":"boolean"},"preCompilationOnly":{"type":"boolean"},"typeOnly":{"type":"boolean"},"circular":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}},"moduleSystem":{"$ref":"#/definitions/ModuleSystemType"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}},"instability":{"type":"number"}}},"DependencyTypeType":{"type":"string","enum":["aliased","core","deprecated","local","localmodule","npm","npm-bundled","npm-dev","npm-no-pkg","npm-optional","npm-peer","npm-unknown","undetermined","unknown","type-only"]},"ModuleSystemType":{"type":"string","enum":["cjs","es6","amd","tsd"]},"RuleSummaryType":{"type":"object","required":["name","severity"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"}}},"SeverityType":{"type":"string","enum":["error","warn","info","ignore"]},"FoldersType":{"type":"array","items":{"$ref":"#/definitions/FolderType"}},"FolderType":{"type":"object","required":["name","moduleCount"],"additionalProperties":false,"properties":{"name":{"type":"string"},"dependents":{"type":"array","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"}}}},"dependencies":{"type":"array","items":{"type":"object","required":["name","valid"],"additionalProperties":false,"properties":{"name":{"type":"string"},"instability":{"type":"number"},"valid":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/RuleSummaryType"}}}}},"moduleCount":{"type":"number"},"afferentCouplings":{"type":"number"},"efferentCouplings":{"type":"number"},"instability":{"type":"number"}}},"SummaryType":{"type":"object","required":["violations","error","warn","info","totalCruised","optionsUsed"],"additionalProperties":false,"properties":{"violations":{"$ref":"#/definitions/ViolationsType"},"error":{"type":"number"},"warn":{"type":"number"},"info":{"type":"number"},"ignore":{"type":"number"},"totalCruised":{"type":"number"},"totalDependenciesCruised":{"type":"number"},"ruleSetUsed":{"$ref":"#/definitions/RuleSetType"},"optionsUsed":{"$ref":"#/definitions/OptionsUsedType"}}},"ViolationsType":{"type":"array","items":{"$ref":"#/definitions/ViolationType"}},"ViolationType":{"type":"object","required":["from","to","rule"],"additionalProperties":false,"properties":{"from":{"type":"string"},"to":{"type":"string"},"type":{"$ref":"#/definitions/ViolationTypeType"},"rule":{"$ref":"#/definitions/RuleSummaryType"},"cycle":{"type":"array","items":{"type":"string"}},"via":{"type":"array","items":{"type":"string"}},"metrics":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}},"to":{"type":"object","required":["instability"],"additionalProperties":false,"properties":{"instability":{"type":"number"}}}}}}},"ViolationTypeType":{"type":"string","enum":["dependency","module","reachability","cycle","instability","folder"]},"RuleSetType":{"type":"object","additionalProperties":false,"properties":{"forbidden":{"type":"array","items":{"$ref":"#/definitions/ForbiddenRuleType"}},"allowed":{"type":"array","items":{"$ref":"#/definitions/AllowedRuleType"}},"allowedSeverity":{"$ref":"#/definitions/SeverityType"},"required":{"type":"array","items":{"$ref":"#/definitions/RequiredRuleType"}}}},"AllowedRuleType":{"oneOf":[{"$ref":"#/definitions/RegularAllowedRuleType"},{"$ref":"#/definitions/ReachabilityAllowedRuleType"}]},"RegularAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"ReachabilityAllowedRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"ForbiddenRuleType":{"oneOf":[{"$ref":"#/definitions/RegularForbiddenRuleType"},{"$ref":"#/definitions/ReachabilityForbiddenRuleType"},{"$ref":"#/definitions/DependentsForbiddenRuleType"}]},"RegularForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"scope":{"type":"string","enum":["module","folder"]},"comment":{"type":"string"},"from":{"$ref":"#/definitions/FromRestrictionType"},"to":{"$ref":"#/definitions/ToRestrictionType"}}},"DependentsForbiddenRuleType":{"type":"object","required":["module","from"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/DependentsModuleRestrictionType"},"from":{"$ref":"#/definitions/DependentsFromRestrictionType"}}},"ReachabilityForbiddenRuleType":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"from":{"$ref":"#/definitions/ReachabilityFromRestrictionType"},"to":{"$ref":"#/definitions/ReachabilityToRestrictionType"}}},"RequiredRuleType":{"type":"object","required":["module","to"],"additionalProperties":false,"properties":{"name":{"type":"string"},"severity":{"$ref":"#/definitions/SeverityType"},"comment":{"type":"string"},"module":{"$ref":"#/definitions/RequiredModuleRestrictionType"},"to":{"$ref":"#/definitions/RequiredToRestrictionType"}}},"FromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"orphan":{"type":"boolean"}}},"ReachabilityFromRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ToRestrictionType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"couldNotResolve":{"type":"boolean"},"circular":{"type":"boolean"},"dynamic":{"type":"boolean"},"exoticallyRequired":{"type":"boolean"},"exoticRequire":{"$ref":"#/definitions/REAsStringsType"},"exoticRequireNot":{"$ref":"#/definitions/REAsStringsType"},"preCompilationOnly":{"type":"boolean"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"dependencyTypesNot":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}},"moreThanOneDependencyType":{"type":"boolean"},"license":{"$ref":"#/definitions/REAsStringsType"},"licenseNot":{"$ref":"#/definitions/REAsStringsType"},"via":{"$ref":"#/definitions/REAsStringsType"},"viaNot":{"$ref":"#/definitions/REAsStringsType"},"moreUnstable":{"type":"boolean"}}},"DependentsModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"numberOfDependentsLessThan":{"type":"integer","minimum":0,"maximum":100},"numberOfDependentsMoreThan":{"type":"integer","minimum":0,"maximum":100}}},"DependentsFromRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"ReachabilityToRestrictionType":{"required":["reachable"],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"},"reachable":{"type":"boolean"}}},"RequiredModuleRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"pathNot":{"$ref":"#/definitions/REAsStringsType"}}},"RequiredToRestrictionType":{"required":[],"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"REAsStringsType":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"OptionsUsedType":{"type":"object","additionalProperties":false,"properties":{"doNotFollow":{"$ref":"#/definitions/CompoundDoNotFollowType"},"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"oneOf":[{"$ref":"#/definitions/REAsStringsType"},{"$ref":"#/definitions/CompoundIncludeOnlyType"}]},"focus":{"$ref":"#/definitions/CompoundFocusType"},"knownViolations":{"$ref":"#/definitions/ViolationsType"},"collapse":{"type":"string"},"maxDepth":{"type":"integer","minimum":0,"maximum":99},"moduleSystems":{"$ref":"#/definitions/ModuleSystemsType"},"prefix":{"type":"string"},"preserveSymlinks":{"type":"boolean"},"combinedDependencies":{"type":"boolean"},"tsConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"tsPreCompilationDeps":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["specify"]}]},"extraExtensionsToScan":{"type":"array","items":{"type":"string"}},"externalModuleResolutionStrategy":{"type":"string","enum":["node_modules","yarn-pnp"]},"forceDeriveDependents":{"type":"boolean"},"webpackConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"},"env":{"oneOf":[{"type":"object"},{"type":"string"}]},"arguments":{"type":"object"}}},"enhancedResolveOptions":{"type":"object","additionalProperties":false,"properties":{"exportsFields":{"type":"array","items":{"type":"string"}},"conditionNames":{"type":"array","items":{"type":"string"}},"extensions":{"type":"array","items":{"type":"string"}},"cachedInputFileSystem":{"type":"object","additionalProperties":false,"properties":{"cacheDuration":{"type":"integer","minimum":0,"maximum":1800000}}}}},"babelConfig":{"type":"object","additionalProperties":false,"properties":{"fileName":{"type":"string"}}},"parser":{"type":"string","enum":["acorn","swc","tsc"]},"exoticRequireStrings":{"type":"array","items":{"type":"string"}},"reporterOptions":{"$ref":"#/definitions/ReporterOptionsType"},"progress":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["cli-feedback","performance-log","none"]}}},"metrics":{"type":"boolean"},"baseDir":{"type":"string"},"args":{"type":"string"},"rulesFile":{"type":"string"},"outputTo":{"type":"string"},"outputType":{"$ref":"#/definitions/OutputType"}}},"ModuleSystemsType":{"type":"array","items":{"$ref":"#/definitions/ModuleSystemType"}},"OutputType":{"oneOf":[{"type":"string","enum":["json","html","dot","ddot","cdot","archi","fdot","flat","csv","err","err-long","err-html","teamcity","anon","text","metrics"]},{"type":"string","pattern":"^plugin:[^:]+$"}]},"CompoundExcludeType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dynamic":{"type":"boolean"}}},"CompoundDoNotFollowType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"},"dependencyTypes":{"type":"array","items":{"$ref":"#/definitions/DependencyTypeType"}}}},"CompoundIncludeOnlyType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"CompoundFocusType":{"type":"object","additionalProperties":false,"properties":{"path":{"$ref":"#/definitions/REAsStringsType"}}},"ReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"anon":{"$ref":"#/definitions/AnonReporterOptionsType"},"archi":{"$ref":"#/definitions/DotReporterOptionsType"},"dot":{"$ref":"#/definitions/DotReporterOptionsType"},"ddot":{"$ref":"#/definitions/DotReporterOptionsType"},"flat":{"$ref":"#/definitions/DotReporterOptionsType"},"metrics":{"$ref":"#/definitions/MetricsReporterOptionsType"}}},"AnonReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"wordlist":{"type":"array","items":{"type":"string"}}}},"MetricsReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"orderBy":{"type":"string","enum":["instability","moduleCount","afferentCouplings","efferentCouplings","name"]},"hideModules":{"type":"boolean"},"hideFolders":{"type":"boolean"}}},"DotReporterOptionsType":{"type":"object","additionalProperties":false,"properties":{"collapsePattern":{"$ref":"#/definitions/REAsStringsType"},"filters":{"$ref":"#/definitions/ReporterFiltersType"},"showMetrics":{"type":"boolean"},"theme":{"$ref":"#/definitions/DotThemeType"}}},"DotThemeType":{"type":"object","additionalProperties":false,"properties":{"replace":{"type":"boolean"},"graph":{"type":"object"},"node":{"type":"object"},"edge":{"type":"object"},"modules":{"$ref":"#/definitions/DotThemeArrayType"},"dependencies":{"$ref":"#/definitions/DotThemeArrayType"}}},"DotThemeArrayType":{"type":"array","items":{"$ref":"#/definitions/DotThemeEntryType"}},"DotThemeEntryType":{"type":"object","additionalProperties":false,"properties":{"criteria":{"type":"object"},"attributes":{"type":"object"}}},"ReporterFiltersType":{"type":"object","additionalProperties":false,"properties":{"exclude":{"$ref":"#/definitions/CompoundExcludeType"},"includeOnly":{"$ref":"#/definitions/CompoundIncludeOnlyType"},"focus":{"$ref":"#/definitions/CompoundFocusType"}}}}}
@@ -2,6 +2,7 @@ const _has = require("lodash/has");
2
2
  const matchModuleRule = require("./match-module-rule");
3
3
  const matchDependencyRule = require("./match-dependency-rule");
4
4
  const violatesRequiredRule = require("./violates-required-rule");
5
+ const matchFolderRule = require("./match-folder-dependency-rule");
5
6
 
6
7
  function compareSeverity(pFirst, pSecond) {
7
8
  const lSeverity2Int = {
@@ -81,31 +82,33 @@ function validateAgainstRules(pRuleSet, pFrom, pTo, pMatchModule) {
81
82
  return lReturnValue;
82
83
  }
83
84
 
84
- /**
85
- * If pValidate equals true, validates the pFrom and pTo
86
- * dependency pair against the given ruleset pRuleSet
87
- *
88
- * @param {import("../../types/rule-set").IFlattenedRuleSet} pRuleSet
89
- * a ruleset (adhering to [the ruleset schema](jsonschema.json))
90
- * @param {import("../../types/cruise-result").IModule} pFrom
91
- * The from part of the dependency
92
- * @param {import("../../types/cruise-result").IModule} pTo
93
- * The 'to' part of the dependency
94
- * @return {any} an object with as attributes:
95
- * - valid: (boolean) true if the relation
96
- * between pTo and pFalse is valid (as far as the
97
- * given ruleset is concerend). false in all other
98
- * cases.
99
- * - rule (only when the relation between pFrom and
100
- * pTo was false):
101
- * - name: the name (from the ruleset) of the
102
- * violated rule
103
- * - severity: the severity of that rule - as per
104
- * the ruleset
105
- */
106
85
  module.exports = {
107
86
  module: (pRuleSet, pModule) =>
108
87
  validateAgainstRules(pRuleSet, pModule, {}, matchModuleRule),
88
+ /**
89
+ * Validates the pFrom and pTo dependency pair against the given
90
+ * ruleset pRuleSet
91
+ *
92
+ * @param {import("../../types/rule-set").IFlattenedRuleSet} pRuleSet
93
+ * a ruleset (adhering to [the ruleset schema](jsonschema.json))
94
+ * @param {import("../../types/cruise-result").IModule} pFrom
95
+ * The from part of the dependency
96
+ * @param {import("../../types/cruise-result").IModule} pTo
97
+ * The 'to' part of the dependency
98
+ * @return {any} an object with as attributes:
99
+ * - valid: (boolean) true if the relation
100
+ * between pTo and pFalse is valid (as far as the
101
+ * given ruleset is concerend). false in all other
102
+ * cases.
103
+ * - rule (only when the relation between pFrom and
104
+ * pTo was false):
105
+ * - name: the name (from the ruleset) of the
106
+ * violated rule
107
+ * - severity: the severity of that rule - as per
108
+ * the ruleset
109
+ */
109
110
  dependency: (pRuleSet, pFrom, pTo) =>
110
111
  validateAgainstRules(pRuleSet, pFrom, pTo, matchDependencyRule),
112
+ folder: (pRuleSet, pFromFolder, pToFolder) =>
113
+ validateAgainstRules(pRuleSet, pFromFolder, pToFolder, matchFolderRule),
111
114
  };
@@ -1,5 +1,5 @@
1
1
  const { extractGroups } = require("../utl/regex-util");
2
- const isModuleOnlyRule = require("./is-module-only-rule");
2
+ const { isModuleOnlyRule, isFolderScope } = require("./rule-classifiers");
3
3
  const matchers = require("./matchers");
4
4
 
5
5
  function match(pFrom, pTo) {
@@ -40,7 +40,8 @@ function match(pFrom, pTo) {
40
40
  };
41
41
  }
42
42
 
43
- const isInteresting = (pRule) => !isModuleOnlyRule(pRule);
43
+ const isInteresting = (pRule) =>
44
+ !isModuleOnlyRule(pRule) && !isFolderScope(pRule);
44
45
 
45
46
  module.exports = {
46
47
  match,
@@ -0,0 +1,19 @@
1
+ const { isModuleOnlyRule, isFolderScope } = require("./rule-classifiers");
2
+ const matchers = require("./matchers");
3
+
4
+ function match(pFromFolder, pToFolder) {
5
+ return (pRule) =>
6
+ // TODO: add path rules - they need to be frippled from the ones
7
+ // already in place for modules
8
+ // TODO: same for cycles - but these will additionally have to be
9
+ // yognated with an adapted cycle detection for folders
10
+ matchers.toIsMoreUnstable(pRule, pFromFolder, pToFolder);
11
+ }
12
+
13
+ const isInteresting = (pRule) =>
14
+ isFolderScope(pRule) && !isModuleOnlyRule(pRule);
15
+
16
+ module.exports = {
17
+ match,
18
+ isInteresting,
19
+ };
@@ -1,6 +1,6 @@
1
1
  const _has = require("lodash/has");
2
2
  const { extractGroups } = require("../utl/regex-util");
3
- const isModuleOnlyRule = require("./is-module-only-rule");
3
+ const { isModuleOnlyRule, isFolderScope } = require("./rule-classifiers");
4
4
  const matchers = require("./matchers");
5
5
 
6
6
  function matchesOrphanRule(pRule, pModule) {
@@ -92,7 +92,8 @@ function match(pModule) {
92
92
  );
93
93
  };
94
94
  }
95
- const isInteresting = (pRule) => isModuleOnlyRule(pRule);
95
+ const isInteresting = (pRule) =>
96
+ isModuleOnlyRule(pRule) && !isFolderScope(pRule);
96
97
 
97
98
  module.exports = {
98
99
  matchesOrphanRule,
@@ -0,0 +1,21 @@
1
+ const has = require("lodash/has");
2
+ const get = require("lodash/get");
3
+
4
+ /**
5
+ * @param {any} pRule a dependency-cruiser rule
6
+ * @returns {boolean} whether or not the rule is 'module only'
7
+ */
8
+ function isModuleOnlyRule(pRule) {
9
+ return (
10
+ has(pRule.from || {}, "orphan") ||
11
+ // note: the to might become optional for required rules
12
+ has(pRule.to, "reachable") ||
13
+ has(pRule, "module")
14
+ );
15
+ }
16
+
17
+ function isFolderScope(pRule) {
18
+ return get(pRule, "scope", "module") === "folder";
19
+ }
20
+
21
+ module.exports = { isModuleOnlyRule, isFolderScope };
@@ -1,4 +1,4 @@
1
- import { SeverityType } from "./shared-types";
1
+ import { SeverityType, RuleScopeType } from "./shared-types";
2
2
  import {
3
3
  IBaseRestrictionType,
4
4
  IFromRestriction,
@@ -40,6 +40,17 @@ export interface IRegularForbiddenRuleType extends IBaseRuleType {
40
40
  * rule. Leave it empty if you want any module to be matched.
41
41
  */
42
42
  to: IToRestriction;
43
+ /**
44
+ * What to apply the rule to - modules (the default) or folders. Switching
45
+ * the scope to 'folder' can be useful in rules where this makes a difference
46
+ * like those regarding circular dependencies or instability. Two things
47
+ * to note when you decide to use 'folder' level scope: (1) the 'scope' attribute
48
+ * is experimental - the way to indicate the scope of a rule can change
49
+ * over time without dependency-cruiser undergoing a major bump. (2) Only
50
+ * the to.moreUnstable attribute works at the moment. Other attributes will
51
+ * follow suit in releases after 11.3.0."
52
+ */
53
+ scope?: RuleScopeType;
43
54
  }
44
55
 
45
56
  export interface IReachabilityForbiddenRuleType extends IBaseRuleType {
@@ -49,3 +49,5 @@ export type ViolationType =
49
49
  | "cycle"
50
50
  | "reachability"
51
51
  | "instability";
52
+
53
+ export type RuleScopeType = "module" | "folder";
@@ -1,16 +0,0 @@
1
- const _has = require("lodash/has");
2
-
3
- /**
4
- * @param {any} pRule a dependency-cruiser rule
5
- * @returns {boolean} whether or not the rule is 'module only'
6
- */
7
- function isModuleOnlyRule(pRule) {
8
- return (
9
- _has(pRule.from || {}, "orphan") ||
10
- // note: the to might become optional for required rules
11
- _has(pRule.to, "reachable") ||
12
- _has(pRule, "module")
13
- );
14
- }
15
-
16
- module.exports = isModuleOnlyRule;