dependency-cruiser 17.3.2 → 17.3.3-beta-2

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.
Files changed (232) hide show
  1. package/bin/depcruise-baseline.mjs +43 -43
  2. package/bin/depcruise-fmt.mjs +89 -89
  3. package/bin/dependency-cruise.mjs +171 -171
  4. package/configs/plugins/3d-reporter-plugin.mjs +36 -36
  5. package/configs/plugins/stats-reporter-plugin.mjs +51 -51
  6. package/configs/recommended-strict.cjs +5 -5
  7. package/configs/recommended-warn-only.cjs +5 -5
  8. package/configs/recommended.cjs +22 -22
  9. package/configs/rules/no-circular.cjs +10 -10
  10. package/configs/rules/no-deprecated-core.cjs +10 -10
  11. package/configs/rules/no-duplicate-dependency-types.cjs +17 -17
  12. package/configs/rules/no-non-package-json.cjs +11 -11
  13. package/configs/rules/no-orphans.cjs +18 -18
  14. package/configs/rules/not-to-deprecated.cjs +10 -10
  15. package/configs/rules/not-to-unresolvable.cjs +10 -10
  16. package/package.json +170 -170
  17. package/src/cache/cache.mjs +139 -139
  18. package/src/cache/content-strategy.mjs +88 -88
  19. package/src/cache/find-content-changes.mjs +58 -58
  20. package/src/cache/helpers.mjs +52 -52
  21. package/src/cache/metadata-strategy.mjs +83 -83
  22. package/src/cache/options-compatible.mjs +56 -109
  23. package/src/cli/assert-node-environment-suitable.mjs +7 -7
  24. package/src/cli/defaults.mjs +5 -5
  25. package/src/cli/format-meta-info.mjs +22 -22
  26. package/src/cli/format.mjs +28 -28
  27. package/src/cli/index.mjs +145 -145
  28. package/src/cli/init-config/build-config.mjs +94 -94
  29. package/src/cli/init-config/environment-helpers.mjs +77 -77
  30. package/src/cli/init-config/find-extensions.mjs +27 -27
  31. package/src/cli/init-config/get-user-input.mjs +151 -151
  32. package/src/cli/init-config/index.mjs +88 -88
  33. package/src/cli/init-config/normalize-init-options.mjs +47 -47
  34. package/src/cli/init-config/utl.mjs +4 -4
  35. package/src/cli/init-config/validators.mjs +10 -10
  36. package/src/cli/init-config/write-config.mjs +21 -21
  37. package/src/cli/init-config/write-run-scripts-to-manifest.mjs +103 -107
  38. package/src/cli/listeners/cli-feedback.mjs +49 -49
  39. package/src/cli/listeners/ndjson.mjs +66 -66
  40. package/src/cli/listeners/performance-log/format-helpers.mjs +63 -63
  41. package/src/cli/listeners/performance-log/handlers.mjs +56 -56
  42. package/src/cli/listeners/performance-log/index.mjs +37 -37
  43. package/src/cli/normalize-cli-options.mjs +182 -182
  44. package/src/cli/tools/wrap-stream-in-html.mjs +37 -37
  45. package/src/cli/utl/assert-file-existence.mjs +7 -7
  46. package/src/cli/utl/io.mjs +28 -31
  47. package/src/config-utl/extract-babel-config.mjs +69 -69
  48. package/src/config-utl/extract-depcruise-config/index.mjs +54 -54
  49. package/src/config-utl/extract-depcruise-config/merge-configs.mjs +63 -63
  50. package/src/config-utl/extract-depcruise-config/read-config.mjs +9 -9
  51. package/src/config-utl/extract-depcruise-options.mjs +9 -9
  52. package/src/config-utl/extract-known-violations.mjs +49 -49
  53. package/src/config-utl/extract-ts-config.mjs +46 -48
  54. package/src/config-utl/extract-webpack-resolve-config.mjs +88 -88
  55. package/src/config-utl/make-absolute.mjs +5 -5
  56. package/src/enrich/add-validations.mjs +13 -13
  57. package/src/enrich/derive/circular.mjs +49 -49
  58. package/src/enrich/derive/dependents.mjs +27 -27
  59. package/src/enrich/derive/folders/aggregate-to-folders.mjs +104 -104
  60. package/src/enrich/derive/folders/index.mjs +19 -19
  61. package/src/enrich/derive/folders/utl.mjs +18 -18
  62. package/src/enrich/derive/metrics/get-module-metrics.mjs +27 -27
  63. package/src/enrich/derive/metrics/index.mjs +8 -8
  64. package/src/enrich/derive/module-utl.mjs +18 -18
  65. package/src/enrich/derive/orphan/index.mjs +18 -18
  66. package/src/enrich/derive/orphan/is-orphan.mjs +9 -9
  67. package/src/enrich/derive/reachable.mjs +165 -168
  68. package/src/enrich/enrich-modules.mjs +25 -25
  69. package/src/enrich/index.mjs +15 -15
  70. package/src/enrich/soften-known-violations.mjs +90 -90
  71. package/src/enrich/summarize/add-rule-set-used.mjs +13 -13
  72. package/src/enrich/summarize/get-stats.mjs +17 -17
  73. package/src/enrich/summarize/index.mjs +18 -18
  74. package/src/enrich/summarize/is-same-violation.mjs +30 -30
  75. package/src/enrich/summarize/summarize-folders.mjs +35 -35
  76. package/src/enrich/summarize/summarize-modules.mjs +97 -97
  77. package/src/enrich/summarize/summarize-options.mjs +71 -71
  78. package/src/extract/acorn/estree-helpers.mjs +66 -66
  79. package/src/extract/acorn/extract-amd-deps.mjs +63 -64
  80. package/src/extract/acorn/extract-cjs-deps.mjs +83 -83
  81. package/src/extract/acorn/extract-es6-deps.mjs +54 -54
  82. package/src/extract/acorn/extract-stats.mjs +4 -4
  83. package/src/extract/acorn/extract.mjs +28 -28
  84. package/src/extract/acorn/parse.mjs +37 -37
  85. package/src/extract/clear-caches.mjs +7 -7
  86. package/src/extract/extract-dependencies.mjs +109 -109
  87. package/src/extract/extract-stats.mjs +21 -21
  88. package/src/extract/gather-initial-sources.mjs +64 -64
  89. package/src/extract/helpers.mjs +73 -71
  90. package/src/extract/index.mjs +120 -120
  91. package/src/extract/resolve/determine-dependency-types.mjs +166 -169
  92. package/src/extract/resolve/external-module-helpers.mjs +76 -76
  93. package/src/extract/resolve/get-manifest.mjs +79 -79
  94. package/src/extract/resolve/index.mjs +175 -164
  95. package/src/extract/resolve/is-built-in.mjs +22 -24
  96. package/src/extract/resolve/merge-manifests.mjs +43 -43
  97. package/src/extract/resolve/module-classifiers.mjs +229 -229
  98. package/src/extract/resolve/resolve-amd.mjs +44 -44
  99. package/src/extract/resolve/resolve-cjs.mjs +40 -40
  100. package/src/extract/resolve/resolve-helpers.mjs +20 -20
  101. package/src/extract/resolve/resolve.mjs +26 -26
  102. package/src/extract/swc/dependency-visitor.mjs +211 -211
  103. package/src/extract/swc/extract-swc-deps.mjs +4 -4
  104. package/src/extract/swc/extract.mjs +7 -7
  105. package/src/extract/swc/parse.mjs +12 -12
  106. package/src/extract/transpile/babel-wrap.mjs +9 -9
  107. package/src/extract/transpile/coffeescript-wrap.mjs +21 -21
  108. package/src/extract/transpile/index.mjs +47 -47
  109. package/src/extract/transpile/javascript-wrap.mjs +6 -6
  110. package/src/extract/transpile/livescript-wrap.mjs +5 -5
  111. package/src/extract/transpile/meta.mjs +80 -80
  112. package/src/extract/transpile/svelte-preprocess.mjs +73 -73
  113. package/src/extract/transpile/svelte-wrap.mjs +19 -19
  114. package/src/extract/transpile/try-import-available.mjs +26 -27
  115. package/src/extract/transpile/typescript-wrap.mjs +39 -39
  116. package/src/extract/transpile/vue-template-wrap.cjs +43 -43
  117. package/src/extract/tsc/extract-stats.mjs +4 -4
  118. package/src/extract/tsc/extract-typescript-deps.mjs +429 -398
  119. package/src/extract/tsc/extract.mjs +22 -22
  120. package/src/extract/tsc/parse.mjs +21 -21
  121. package/src/graph-utl/add-focus.mjs +35 -35
  122. package/src/graph-utl/compare.mjs +24 -24
  123. package/src/graph-utl/consolidate-module-dependencies.mjs +35 -35
  124. package/src/graph-utl/consolidate-modules.mjs +33 -33
  125. package/src/graph-utl/consolidate-to-folder.mjs +13 -13
  126. package/src/graph-utl/consolidate-to-pattern.mjs +34 -34
  127. package/src/graph-utl/filter-bank.mjs +74 -69
  128. package/src/graph-utl/indexed-module-graph.mjs +227 -225
  129. package/src/graph-utl/match-facade.mjs +3 -3
  130. package/src/graph-utl/rule-set.mjs +20 -20
  131. package/src/graph-utl/strip-self-transitions.mjs +6 -6
  132. package/src/main/cruise.mjs +81 -81
  133. package/src/main/files-and-dirs/normalize.mjs +7 -7
  134. package/src/main/format.mjs +11 -14
  135. package/src/main/helpers.mjs +25 -25
  136. package/src/main/index.mjs +8 -8
  137. package/src/main/options/assert-validity.mjs +100 -100
  138. package/src/main/options/defaults.mjs +11 -11
  139. package/src/main/options/normalize.mjs +158 -160
  140. package/src/main/report-wrap.mjs +37 -37
  141. package/src/main/resolve-options/normalize.mjs +127 -128
  142. package/src/main/rule-set/assert-validity.mjs +67 -73
  143. package/src/main/rule-set/normalize.mjs +81 -79
  144. package/src/meta.cjs +15 -16
  145. package/src/report/anon/anonymize-path-element.mjs +20 -34
  146. package/src/report/anon/anonymize-path.mjs +11 -11
  147. package/src/report/anon/index.mjs +119 -119
  148. package/src/report/anon/random-string.mjs +23 -23
  149. package/src/report/azure-devops.mjs +75 -99
  150. package/src/report/baseline.mjs +9 -9
  151. package/src/report/csv.mjs +13 -13
  152. package/src/report/d2.mjs +105 -105
  153. package/src/report/dot/default-theme.mjs +152 -152
  154. package/src/report/dot/index.mjs +146 -146
  155. package/src/report/dot/module-utl.mjs +72 -72
  156. package/src/report/dot/prepare-custom-level.mjs +20 -20
  157. package/src/report/dot/prepare-flat-level.mjs +11 -11
  158. package/src/report/dot/prepare-folder-level.mjs +12 -13
  159. package/src/report/dot/theming.mjs +73 -73
  160. package/src/report/dot-webpage/dot-module.mjs +36 -36
  161. package/src/report/dot-webpage/svg-in-html-snippets/script.cjs +208 -210
  162. package/src/report/dot-webpage/svg-in-html-snippets/style.css +51 -51
  163. package/src/report/dot-webpage/wrap-in-html.mjs +7 -7
  164. package/src/report/error-html/index.mjs +49 -49
  165. package/src/report/error-html/utl.mjs +99 -99
  166. package/src/report/error-long.mjs +1 -1
  167. package/src/report/error.mjs +93 -93
  168. package/src/report/html/index.mjs +48 -48
  169. package/src/report/identity.mjs +4 -4
  170. package/src/report/index.mjs +33 -33
  171. package/src/report/json.mjs +4 -4
  172. package/src/report/markdown.mjs +120 -120
  173. package/src/report/mermaid.mjs +111 -111
  174. package/src/report/metrics.mjs +185 -185
  175. package/src/report/null.mjs +4 -4
  176. package/src/report/plugins.mjs +41 -41
  177. package/src/report/teamcity.mjs +150 -150
  178. package/src/report/text.mjs +42 -42
  179. package/src/report/utl/dependency-to-incidence-transformer.mjs +32 -32
  180. package/src/report/utl/index.mjs +53 -53
  181. package/src/schema/configuration.validate.mjs +1 -0
  182. package/src/schema/cruise-result.validate.mjs +1 -0
  183. package/src/schema/utl.mjs +6 -0
  184. package/src/utl/array-util.mjs +25 -25
  185. package/src/utl/bus.mjs +12 -12
  186. package/src/utl/extract-root-module-name.cjs +8 -8
  187. package/src/utl/find-all-files.mjs +54 -54
  188. package/src/utl/get-extension.mjs +2 -2
  189. package/src/utl/object-util.mjs +21 -22
  190. package/src/utl/path-to-posix.mjs +5 -5
  191. package/src/utl/regex-util.mjs +20 -20
  192. package/src/utl/try-import.mjs +42 -41
  193. package/src/utl/try-require.cjs +23 -23
  194. package/src/utl/wrap-and-indent.mjs +33 -33
  195. package/src/validate/index.mjs +65 -65
  196. package/src/validate/match-dependency-rule.mjs +47 -47
  197. package/src/validate/match-folder-dependency-rule.mjs +27 -27
  198. package/src/validate/match-module-rule-helpers.mjs +76 -76
  199. package/src/validate/match-module-rule.mjs +12 -12
  200. package/src/validate/matchers.mjs +162 -162
  201. package/src/validate/rule-classifiers.mjs +9 -9
  202. package/src/validate/violates-required-rule.mjs +23 -23
  203. package/types/cache-options.d.mts +27 -27
  204. package/types/config-utl/extract-babel-config.d.mts +1 -1
  205. package/types/config-utl/extract-depcruise-config.d.mts +3 -3
  206. package/types/config-utl/extract-depcruise-options.d.mts +1 -1
  207. package/types/config-utl/extract-ts-config.d.mts +1 -1
  208. package/types/config-utl/extract-webpack-resolve-config.d.mts +3 -3
  209. package/types/configuration.d.mts +10 -10
  210. package/types/cruise-result.d.mts +414 -414
  211. package/types/dependency-cruiser.d.mts +52 -52
  212. package/types/filter-types.d.mts +45 -45
  213. package/types/options.d.mts +430 -430
  214. package/types/plugins/3d-reporter-plugin.d.mts +9 -9
  215. package/types/plugins/mermaid-reporter-plugin.d.mts +10 -10
  216. package/types/plugins/stats-reporter-plugin.d.mts +9 -9
  217. package/types/reporter-options.d.mts +196 -196
  218. package/types/resolve-options.d.mts +23 -23
  219. package/types/restrictions.d.mts +174 -174
  220. package/types/rule-set.d.mts +132 -132
  221. package/types/rule-summary.d.mts +14 -14
  222. package/types/shared-types.d.mts +89 -89
  223. package/types/strict-filter-types.d.mts +52 -52
  224. package/types/strict-options.d.mts +34 -34
  225. package/types/strict-restrictions.d.mts +25 -25
  226. package/types/strict-rule-set.d.mts +36 -36
  227. package/types/violations.d.mts +40 -40
  228. package/src/schema/README.md +0 -5
  229. package/src/schema/baseline-violations.schema.mjs +0 -1
  230. package/src/schema/configuration.schema.mjs +0 -1
  231. package/src/schema/cruise-result.schema.mjs +0 -1
  232. package/types/README.md +0 -1
@@ -1,471 +1,471 @@
1
1
  import type { ICruiseOptions } from "./options.mjs";
2
2
  import type { IFlattenedRuleSet } from "./rule-set.mjs";
3
3
  import type {
4
- IMiniDependency,
5
- DependencyType,
6
- ModuleSystemType,
7
- ProtocolType,
8
- ExperimentalStatsType,
4
+ IMiniDependency,
5
+ DependencyType,
6
+ ModuleSystemType,
7
+ ProtocolType,
8
+ ExperimentalStatsType,
9
9
  } from "./shared-types.mjs";
10
10
  import type { IViolation } from "./violations.mjs";
11
11
  import type { IRuleSummary } from "./rule-summary.mjs";
12
12
  import type { IChange } from "watskeburt";
13
13
 
14
14
  export interface IRevisionChange extends IChange {
15
- // optional because
16
- // - in content strategy 'ignored' and 'deleted' files can't have a checksum
17
- // - in metadata strategy we don't calculate a checksum because ~we're lazy~
18
- // it's an unnecessary expense
19
- checksum?: string;
15
+ // optional because
16
+ // - in content strategy 'ignored' and 'deleted' files can't have a checksum
17
+ // - in metadata strategy we don't calculate a checksum because ~we're lazy~
18
+ // it's an unnecessary expense
19
+ checksum?: string;
20
20
  }
21
21
 
22
22
  /**
23
23
  * caching revisionData. doc and proper naming will follow
24
24
  */
25
25
  export interface IRevisionData {
26
- /**
27
- * The version of the cache format. If the version number found in
28
- * the cache is < the version number in the code, the cache is
29
- * considered stale and won't be used (and overwritten on next run).
30
- */
31
- cacheFormatVersion?: number;
32
- SHA1: string;
33
- changes: IRevisionChange[];
26
+ /**
27
+ * The version of the cache format. If the version number found in
28
+ * the cache is < the version number in the code, the cache is
29
+ * considered stale and won't be used (and overwritten on next run).
30
+ */
31
+ cacheFormatVersion?: number;
32
+ SHA1: string;
33
+ changes: IRevisionChange[];
34
34
  }
35
35
 
36
36
  export interface ICruiseResult {
37
- /**
38
- * A list of modules, with for each module the modules it depends upon
39
- */
40
- modules: IModule[];
41
- /**
42
- * A list of folders, as derived from the detected modules, with for each
43
- * folder a bunch of metrics (adapted from 'Agile software development:
44
- * principles, patterns, and practices' by Robert C Martin (ISBN 0-13-597444-5).
45
- * Note: these metrics substitute 'components' and 'classes' from that book
46
- * with 'folders' and 'modules'; the closest relatives that work for the most
47
- * programming styles in JavaScript (and its derivative languages).
48
- */
49
- folders?: IFolder[];
50
- /**
51
- * Data summarizing the found dependencies
52
- */
53
- summary: ISummary;
54
- /**
55
- * caching revisionData. doc and proper naming will follow
56
- */
57
- revisionData?: IRevisionData;
37
+ /**
38
+ * A list of modules, with for each module the modules it depends upon
39
+ */
40
+ modules: IModule[];
41
+ /**
42
+ * A list of folders, as derived from the detected modules, with for each
43
+ * folder a bunch of metrics (adapted from 'Agile software development:
44
+ * principles, patterns, and practices' by Robert C Martin (ISBN 0-13-597444-5).
45
+ * Note: these metrics substitute 'components' and 'classes' from that book
46
+ * with 'folders' and 'modules'; the closest relatives that work for the most
47
+ * programming styles in JavaScript (and its derivative languages).
48
+ */
49
+ folders?: IFolder[];
50
+ /**
51
+ * Data summarizing the found dependencies
52
+ */
53
+ summary: ISummary;
54
+ /**
55
+ * caching revisionData. doc and proper naming will follow
56
+ */
57
+ revisionData?: IRevisionData;
58
58
  }
59
59
 
60
60
  export interface IModule {
61
- /**
62
- * The (resolved) file name of the module, e.g. 'src/main/index.js'
63
- */
64
- source: string;
65
- /**
66
- * 'true' if this module violated a rule; 'false' in all other cases. The violated rule will
67
- * be in the 'rule' object at the same level.
68
- */
69
- valid: boolean;
70
- /**
71
- * list of modules this module depends on
72
- */
73
- dependencies: IDependency[];
74
- /**
75
- * list of modules that depend on this module (values are _resolved_ names of
76
- * those modules)
77
- */
78
- dependents: string[];
79
- /**
80
- * Whether or not this is a node.js core module
81
- */
82
- coreModule?: boolean;
83
- /**
84
- * 'true' if dependency-cruiser could not resolve the module name in the source code to a
85
- * file name or core module. 'false' in all other cases.
86
- */
87
- couldNotResolve?: boolean;
88
- /**
89
- * the type of inclusion - local, core, unknown (= we honestly don't know), undetermined (=
90
- * we didn't bother determining it) or one of the npm dependencies defined in a package.json
91
- * ('npm' for 'dependencies', 'npm-dev', 'npm-optional', 'npm-peer', 'npm-no-pkg' for
92
- * development, optional, peer dependencies and dependencies in node_modules but not in
93
- * package.json respectively)
94
- */
95
- dependencyTypes?: DependencyType[];
96
- /**
97
- * Whether or not this is a dependency that can be followed any further. This will be
98
- * 'false' for for core modules, json, modules that could not be resolved to a file and
99
- * modules that weren't followed because it matches the doNotFollow expression.
100
- */
101
- followable?: boolean;
102
- /**
103
- * the license, if known (usually known for modules pulled from npm, not for local ones)
104
- */
105
- license?: string;
106
- /**
107
- * 'true' if the file name of this module matches the 'doNotFollow' regular expression
108
- */
109
- matchesDoNotFollow?: boolean;
110
- /**
111
- * 'true' if the file name of this module matches the 'focus' filter regular expression
112
- */
113
- matchesFocus?: boolean;
114
- /**
115
- * 'true' if the file name of this module matches the 'reaches' filter regular expression
116
- */
117
- matchesReaches?: boolean;
118
- /**
119
- * 'true' if the file name of this module matches the 'highlight' regular expression
120
- */
121
- matchesHighlight?: boolean;
122
- /**
123
- * 'true' if this module does not have dependencies, and no module has it as a dependency
124
- */
125
- orphan?: boolean;
126
- /**
127
- * An array of objects that tell whether this module is 'reachable', and according to rule
128
- * in which this reachability was defined
129
- */
130
- reachable?: IReachable[];
131
- /**
132
- * An array of objects that tell which other modules it reaches,
133
- * and that falls within the definition of the passed rule.
134
- */
135
- reaches?: IReaches[];
136
- /**
137
- * an array of rules violated by this module - left out if the module is valid
138
- */
139
- rules?: IRuleSummary[];
140
- /**
141
- * true if the module was 'consolidated'. Consolidating implies the
142
- * entity a Module represents might be several modules at the same time.
143
- * This attribute is set by tools that consolidate modules for reporting
144
- * purposes - it will not be present after a regular cruise.
145
- */
146
- consolidated?: boolean;
147
- /**
148
- * "number of dependents/ (number of dependents + number of dependencies)
149
- * A measure for how stable the module is; ranging between 0 (completely
150
- * stable module) to 1 (completely instable module). Derived from Uncle
151
- * Bob's instability metric - but applied to a single module instead of
152
- * to a group of them. This attribute is only present when dependency-cruiser
153
- * was asked to calculate metrics.
154
- */
155
- instability?: number;
156
- /**
157
- * a collection of stats that are not part of the regular output, but
158
- * might be interesting for further analysis
159
- */
160
- experimentalStats?: ExperimentalStatsType;
161
- /**
162
- * checksum of the contents of the module. This attribute is currently only
163
- * available when the cruise was executed with caching and the cache strategy
164
- * is 'content'.
165
- */
166
- checksum?: string;
61
+ /**
62
+ * The (resolved) file name of the module, e.g. 'src/main/index.js'
63
+ */
64
+ source: string;
65
+ /**
66
+ * 'true' if this module violated a rule; 'false' in all other cases. The violated rule will
67
+ * be in the 'rule' object at the same level.
68
+ */
69
+ valid: boolean;
70
+ /**
71
+ * list of modules this module depends on
72
+ */
73
+ dependencies: IDependency[];
74
+ /**
75
+ * list of modules that depend on this module (values are _resolved_ names of
76
+ * those modules)
77
+ */
78
+ dependents: string[];
79
+ /**
80
+ * Whether or not this is a node.js core module
81
+ */
82
+ coreModule?: boolean;
83
+ /**
84
+ * 'true' if dependency-cruiser could not resolve the module name in the source code to a
85
+ * file name or core module. 'false' in all other cases.
86
+ */
87
+ couldNotResolve?: boolean;
88
+ /**
89
+ * the type of inclusion - local, core, unknown (= we honestly don't know), undetermined (=
90
+ * we didn't bother determining it) or one of the npm dependencies defined in a package.json
91
+ * ('npm' for 'dependencies', 'npm-dev', 'npm-optional', 'npm-peer', 'npm-no-pkg' for
92
+ * development, optional, peer dependencies and dependencies in node_modules but not in
93
+ * package.json respectively)
94
+ */
95
+ dependencyTypes?: DependencyType[];
96
+ /**
97
+ * Whether or not this is a dependency that can be followed any further. This will be
98
+ * 'false' for for core modules, json, modules that could not be resolved to a file and
99
+ * modules that weren't followed because it matches the doNotFollow expression.
100
+ */
101
+ followable?: boolean;
102
+ /**
103
+ * the license, if known (usually known for modules pulled from npm, not for local ones)
104
+ */
105
+ license?: string;
106
+ /**
107
+ * 'true' if the file name of this module matches the 'doNotFollow' regular expression
108
+ */
109
+ matchesDoNotFollow?: boolean;
110
+ /**
111
+ * 'true' if the file name of this module matches the 'focus' filter regular expression
112
+ */
113
+ matchesFocus?: boolean;
114
+ /**
115
+ * 'true' if the file name of this module matches the 'reaches' filter regular expression
116
+ */
117
+ matchesReaches?: boolean;
118
+ /**
119
+ * 'true' if the file name of this module matches the 'highlight' regular expression
120
+ */
121
+ matchesHighlight?: boolean;
122
+ /**
123
+ * 'true' if this module does not have dependencies, and no module has it as a dependency
124
+ */
125
+ orphan?: boolean;
126
+ /**
127
+ * An array of objects that tell whether this module is 'reachable', and according to rule
128
+ * in which this reachability was defined
129
+ */
130
+ reachable?: IReachable[];
131
+ /**
132
+ * An array of objects that tell which other modules it reaches,
133
+ * and that falls within the definition of the passed rule.
134
+ */
135
+ reaches?: IReaches[];
136
+ /**
137
+ * an array of rules violated by this module - left out if the module is valid
138
+ */
139
+ rules?: IRuleSummary[];
140
+ /**
141
+ * true if the module was 'consolidated'. Consolidating implies the
142
+ * entity a Module represents might be several modules at the same time.
143
+ * This attribute is set by tools that consolidate modules for reporting
144
+ * purposes - it will not be present after a regular cruise.
145
+ */
146
+ consolidated?: boolean;
147
+ /**
148
+ * "number of dependents/ (number of dependents + number of dependencies)
149
+ * A measure for how stable the module is; ranging between 0 (completely
150
+ * stable module) to 1 (completely instable module). Derived from Uncle
151
+ * Bob's instability metric - but applied to a single module instead of
152
+ * to a group of them. This attribute is only present when dependency-cruiser
153
+ * was asked to calculate metrics.
154
+ */
155
+ instability?: number;
156
+ /**
157
+ * a collection of stats that are not part of the regular output, but
158
+ * might be interesting for further analysis
159
+ */
160
+ experimentalStats?: ExperimentalStatsType;
161
+ /**
162
+ * checksum of the contents of the module. This attribute is currently only
163
+ * available when the cruise was executed with caching and the cache strategy
164
+ * is 'content'.
165
+ */
166
+ checksum?: string;
167
167
  }
168
168
 
169
169
  export interface IDependency {
170
- /**
171
- * 'true' if following this dependency will ultimately return to the source, false in all
172
- * other cases
173
- */
174
- circular: boolean;
175
- /**
176
- * Whether or not this is a node.js core module - deprecated in favor of dependencyType ===
177
- * core
178
- */
179
- coreModule: boolean;
180
- /**
181
- * 'true' if dependency-cruiser could not resolve the module name in the source code to a
182
- * file name or core module. 'false' in all other cases.
183
- */
184
- couldNotResolve: boolean;
185
- /**
186
- * 'true' if the dependency between this dependency and its parent only
187
- * exists before compilation takes place. 'false in all other cases.
188
- * Dependency-cruiser will only specify this attribute for TypeScript and
189
- * then only when the option 'tsPreCompilationDeps' has the value 'specify'.
190
- */
191
- preCompilationOnly?: boolean;
192
- /**
193
- * 'true' when the module included the module explicitly as type only with the
194
- * `type` keyword e.g. `import type { IThingus } from 'thing'`. Dependency-cruiser
195
- * will only specify this attribute for TypeScript and when the 'tsPreCompilationDeps'
196
- * option has either the value `true` or `"specify"`.
197
- */
198
- typeOnly?: boolean;
199
- /**
200
- * If following this dependency will ultimately return to the source (circular === true),
201
- * this attribute will contain an (ordered) array of module names that shows (one of) the
202
- * circular path(s)
203
- */
204
- cycle?: IMiniDependency[];
205
- /**
206
- * the type of inclusion - local, core, unknown (= we honestly don't know), undetermined (=
207
- * we didn't bother determining it) or one of the npm dependencies defined in a package.json
208
- * ('npm' for 'dependencies', 'npm-dev', 'npm-optional', 'npm-peer', 'npm-no-pkg' for
209
- * development, optional, peer dependencies and dependencies in node_modules but not in
210
- * package.json respectively)
211
- */
212
- dependencyTypes: DependencyType[];
213
- /**
214
- * true if this dependency is dynamic, false in all other cases
215
- */
216
- dynamic: boolean;
217
- /**
218
- * true if the dependency was defined by a require not named 'require'
219
- * false in all other cases
220
- */
221
- exoticallyRequired: boolean;
222
- /**
223
- * If this dependency was defined by a require not named require (as defined in the
224
- * exoticRequireStrings option): the string that was used
225
- */
226
- exoticRequire?: string;
227
- /**
228
- * Whether or not this is a dependency that can be followed any further. This will be
229
- * 'false' for for core modules, json, modules that could not be resolved to a file and
230
- * modules that weren't followed because it matches the doNotFollow expression.
231
- */
232
- followable: boolean;
233
- /**
234
- * the license, if known (usually known for modules pulled from npm, not for local ones)
235
- */
236
- license?: string;
237
- /**
238
- * 'true' if the file name of this module matches the doNotFollow regular expression
239
- */
240
- matchesDoNotFollow?: boolean;
241
- /**
242
- * The name of the module as it appeared in the source code, e.g. './main'
243
- */
244
- module: string;
245
- /**
246
- * If the module specification is an URI with a protocol in it (e.g.
247
- * `import * as fs from 'node:fs'` or
248
- * `import stuff from 'data:application/json,some-thing'`) -
249
- * this attribute holds the protocol part (e.g. 'node:', 'data:', 'file:').
250
- *
251
- * Also see https://nodejs.org/api/esm.html#esm_urls
252
- */
253
- protocol: ProtocolType;
254
- /**
255
- * If the module specification is an URI and contains a mime type, this
256
- * attribute holds the mime type (e.g. in `import stuff from 'data:application/json,some-thing'
257
- * `this would be data:application/json)
258
- *
259
- * Also see https://nodejs.org/api/esm.html#esm_urls
260
- */
261
- mimeType: string;
262
- moduleSystem: ModuleSystemType;
263
- /**
264
- * The (resolved) file name of the module, e.g. 'src/main//index.js'
265
- */
266
- resolved: string;
267
- /**
268
- * an array of rules violated by this dependency - left out if the dependency is valid
269
- */
270
- rules?: IRuleSummary[];
271
- /**
272
- * 'true' if this dependency violated a rule; 'false' in all other cases. The violated rule
273
- * will be in the 'rule' object at the same level.
274
- */
275
- valid: boolean;
276
- /**
277
- * the (de-normalized) instability of the dependency - also available in
278
- * the module on the 'to' side of this dependency
279
- */
280
- instability: number;
170
+ /**
171
+ * 'true' if following this dependency will ultimately return to the source, false in all
172
+ * other cases
173
+ */
174
+ circular: boolean;
175
+ /**
176
+ * Whether or not this is a node.js core module - deprecated in favor of dependencyType ===
177
+ * core
178
+ */
179
+ coreModule: boolean;
180
+ /**
181
+ * 'true' if dependency-cruiser could not resolve the module name in the source code to a
182
+ * file name or core module. 'false' in all other cases.
183
+ */
184
+ couldNotResolve: boolean;
185
+ /**
186
+ * 'true' if the dependency between this dependency and its parent only
187
+ * exists before compilation takes place. 'false in all other cases.
188
+ * Dependency-cruiser will only specify this attribute for TypeScript and
189
+ * then only when the option 'tsPreCompilationDeps' has the value 'specify'.
190
+ */
191
+ preCompilationOnly?: boolean;
192
+ /**
193
+ * 'true' when the module included the module explicitly as type only with the
194
+ * `type` keyword e.g. `import type { IThingus } from 'thing'`. Dependency-cruiser
195
+ * will only specify this attribute for TypeScript and when the 'tsPreCompilationDeps'
196
+ * option has either the value `true` or `"specify"`.
197
+ */
198
+ typeOnly?: boolean;
199
+ /**
200
+ * If following this dependency will ultimately return to the source (circular === true),
201
+ * this attribute will contain an (ordered) array of module names that shows (one of) the
202
+ * circular path(s)
203
+ */
204
+ cycle?: IMiniDependency[];
205
+ /**
206
+ * the type of inclusion - local, core, unknown (= we honestly don't know), undetermined (=
207
+ * we didn't bother determining it) or one of the npm dependencies defined in a package.json
208
+ * ('npm' for 'dependencies', 'npm-dev', 'npm-optional', 'npm-peer', 'npm-no-pkg' for
209
+ * development, optional, peer dependencies and dependencies in node_modules but not in
210
+ * package.json respectively)
211
+ */
212
+ dependencyTypes: DependencyType[];
213
+ /**
214
+ * true if this dependency is dynamic, false in all other cases
215
+ */
216
+ dynamic: boolean;
217
+ /**
218
+ * true if the dependency was defined by a require not named 'require'
219
+ * false in all other cases
220
+ */
221
+ exoticallyRequired: boolean;
222
+ /**
223
+ * If this dependency was defined by a require not named require (as defined in the
224
+ * exoticRequireStrings option): the string that was used
225
+ */
226
+ exoticRequire?: string;
227
+ /**
228
+ * Whether or not this is a dependency that can be followed any further. This will be
229
+ * 'false' for for core modules, json, modules that could not be resolved to a file and
230
+ * modules that weren't followed because it matches the doNotFollow expression.
231
+ */
232
+ followable: boolean;
233
+ /**
234
+ * the license, if known (usually known for modules pulled from npm, not for local ones)
235
+ */
236
+ license?: string;
237
+ /**
238
+ * 'true' if the file name of this module matches the doNotFollow regular expression
239
+ */
240
+ matchesDoNotFollow?: boolean;
241
+ /**
242
+ * The name of the module as it appeared in the source code, e.g. './main'
243
+ */
244
+ module: string;
245
+ /**
246
+ * If the module specification is an URI with a protocol in it (e.g.
247
+ * `import * as fs from 'node:fs'` or
248
+ * `import stuff from 'data:application/json,some-thing'`) -
249
+ * this attribute holds the protocol part (e.g. 'node:', 'data:', 'file:').
250
+ *
251
+ * Also see https://nodejs.org/api/esm.html#esm_urls
252
+ */
253
+ protocol: ProtocolType;
254
+ /**
255
+ * If the module specification is an URI and contains a mime type, this
256
+ * attribute holds the mime type (e.g. in `import stuff from 'data:application/json,some-thing'
257
+ * `this would be data:application/json)
258
+ *
259
+ * Also see https://nodejs.org/api/esm.html#esm_urls
260
+ */
261
+ mimeType: string;
262
+ moduleSystem: ModuleSystemType;
263
+ /**
264
+ * The (resolved) file name of the module, e.g. 'src/main//index.js'
265
+ */
266
+ resolved: string;
267
+ /**
268
+ * an array of rules violated by this dependency - left out if the dependency is valid
269
+ */
270
+ rules?: IRuleSummary[];
271
+ /**
272
+ * 'true' if this dependency violated a rule; 'false' in all other cases. The violated rule
273
+ * will be in the 'rule' object at the same level.
274
+ */
275
+ valid: boolean;
276
+ /**
277
+ * the (de-normalized) instability of the dependency - also available in
278
+ * the module on the 'to' side of this dependency
279
+ */
280
+ instability: number;
281
281
  }
282
282
 
283
283
  export interface IReachable {
284
- /**
285
- * The name of the rule where the reachability was defined
286
- */
287
- asDefinedInRule: string;
288
- /**
289
- * The matchedFrom attribute shows what the 'from' module that causes the 'reachable'
290
- * information to be what it is. Sometimes the 'asDefinedInRule' is not specific enough -
291
- * e.g. when the from part can be many modules and/ or contains capturing groups used
292
- * in the to part of the rule.
293
- */
294
- matchedFrom: string;
295
- /**
296
- * 'true' if this module is reachable from any of the modules matched by the from part of a
297
- * reachability-rule in 'asDefinedInRule', 'false' if not.
298
- */
299
- value: boolean;
284
+ /**
285
+ * The name of the rule where the reachability was defined
286
+ */
287
+ asDefinedInRule: string;
288
+ /**
289
+ * The matchedFrom attribute shows what the 'from' module that causes the 'reachable'
290
+ * information to be what it is. Sometimes the 'asDefinedInRule' is not specific enough -
291
+ * e.g. when the from part can be many modules and/ or contains capturing groups used
292
+ * in the to part of the rule.
293
+ */
294
+ matchedFrom: string;
295
+ /**
296
+ * 'true' if this module is reachable from any of the modules matched by the from part of a
297
+ * reachability-rule in 'asDefinedInRule', 'false' if not.
298
+ */
299
+ value: boolean;
300
300
  }
301
301
 
302
302
  export interface IReachesModule {
303
- /**
304
- * The (resolved) file name of the module, e.g. 'src/main/index.js'
305
- */
306
- source: string;
307
- /**
308
- * The path along which the 'to' module is reachable from this one.
309
- */
310
- via: IMiniDependency[];
303
+ /**
304
+ * The (resolved) file name of the module, e.g. 'src/main/index.js'
305
+ */
306
+ source: string;
307
+ /**
308
+ * The path along which the 'to' module is reachable from this one.
309
+ */
310
+ via: IMiniDependency[];
311
311
  }
312
312
 
313
313
  export interface IReaches {
314
- /**
315
- * The name of the rule where the reachability was defined
316
- */
317
- asDefinedInRule: string;
318
- /**
319
- * An array of modules that is (transitively) reachable from this module.
320
- */
321
- modules: IReachesModule[];
314
+ /**
315
+ * The name of the rule where the reachability was defined
316
+ */
317
+ asDefinedInRule: string;
318
+ /**
319
+ * An array of modules that is (transitively) reachable from this module.
320
+ */
321
+ modules: IReachesModule[];
322
322
  }
323
323
 
324
324
  /**
325
325
  * Data summarizing the found dependencies
326
326
  */
327
327
  export interface ISummary {
328
- /**
329
- * the number of errors in the dependencies
330
- */
331
- error: number;
332
- /**
333
- * the number of ignored notices in the dependencies
334
- */
335
- ignore: number;
336
- /**
337
- * the number of informational level notices in the dependencies
338
- */
339
- info: number;
340
- optionsUsed: IOptions;
341
- /**
342
- * rules used in the cruise
343
- */
344
- ruleSetUsed?: IFlattenedRuleSet;
345
- /**
346
- * the number of modules cruised
347
- */
348
- totalCruised: number;
349
- /**
350
- * the number of dependencies cruised
351
- */
352
- totalDependenciesCruised?: number;
353
- /**
354
- * A list of violations found in the dependencies. The dependencies themselves also contain
355
- * this information, this summary is here for convenience.
356
- */
357
- violations: IViolation[];
358
- /**
359
- * the number of warnings in the dependencies
360
- */
361
- warn: number;
328
+ /**
329
+ * the number of errors in the dependencies
330
+ */
331
+ error: number;
332
+ /**
333
+ * the number of ignored notices in the dependencies
334
+ */
335
+ ignore: number;
336
+ /**
337
+ * the number of informational level notices in the dependencies
338
+ */
339
+ info: number;
340
+ optionsUsed: IOptions;
341
+ /**
342
+ * rules used in the cruise
343
+ */
344
+ ruleSetUsed?: IFlattenedRuleSet;
345
+ /**
346
+ * the number of modules cruised
347
+ */
348
+ totalCruised: number;
349
+ /**
350
+ * the number of dependencies cruised
351
+ */
352
+ totalDependenciesCruised?: number;
353
+ /**
354
+ * A list of violations found in the dependencies. The dependencies themselves also contain
355
+ * this information, this summary is here for convenience.
356
+ */
357
+ violations: IViolation[];
358
+ /**
359
+ * the number of warnings in the dependencies
360
+ */
361
+ warn: number;
362
362
  }
363
363
 
364
364
  /**
365
365
  * the (command line) options used to generate the dependency-tree
366
366
  */
367
367
  export interface IOptions extends ICruiseOptions {
368
- /**
369
- * arguments passed on the command line
370
- */
371
- args?: string;
372
- /**
373
- * File the output was written to ('-' for stdout)
374
- */
375
- outputTo?: string;
376
- /**
377
- * The rules file used to validate the dependencies (if any)
378
- */
379
- rulesFile?: string;
368
+ /**
369
+ * arguments passed on the command line
370
+ */
371
+ args?: string;
372
+ /**
373
+ * File the output was written to ('-' for stdout)
374
+ */
375
+ outputTo?: string;
376
+ /**
377
+ * The rules file used to validate the dependencies (if any)
378
+ */
379
+ rulesFile?: string;
380
380
  }
381
381
 
382
382
  export interface IFolderDependency {
383
- /**
384
- * the (resolved) name of the dependency
385
- */
386
- name: string;
387
- /**
388
- * 'true' if this folder dependency violated a rule; 'false' in all other
389
- * cases. The violated rule will be in the 'rules' object at the same level.
390
- */
391
- valid: boolean;
392
- /**
393
- * the instability of the dependency (de-normalized - this is a duplicate of
394
- * the one found in the instability of the folder with the same name)
395
- */
396
- instability?: number;
397
- /**
398
- * 'true' if following this dependency will ultimately return to the source, false in all
399
- * other cases
400
- */
401
- circular: boolean;
402
- /**
403
- * If following this dependency will ultimately return to the source (circular === true),
404
- * this attribute will contain an (ordered) array of module names that shows (one of) the
405
- * circular path(s)
406
- */
407
- cycle?: IMiniDependency[];
408
- /**
409
- * an array of rules violated by this dependency - left out if the dependency
410
- * is valid
411
- */
412
- rules?: IRuleSummary[];
383
+ /**
384
+ * the (resolved) name of the dependency
385
+ */
386
+ name: string;
387
+ /**
388
+ * 'true' if this folder dependency violated a rule; 'false' in all other
389
+ * cases. The violated rule will be in the 'rules' object at the same level.
390
+ */
391
+ valid: boolean;
392
+ /**
393
+ * the instability of the dependency (de-normalized - this is a duplicate of
394
+ * the one found in the instability of the folder with the same name)
395
+ */
396
+ instability?: number;
397
+ /**
398
+ * 'true' if following this dependency will ultimately return to the source, false in all
399
+ * other cases
400
+ */
401
+ circular: boolean;
402
+ /**
403
+ * If following this dependency will ultimately return to the source (circular === true),
404
+ * this attribute will contain an (ordered) array of module names that shows (one of) the
405
+ * circular path(s)
406
+ */
407
+ cycle?: IMiniDependency[];
408
+ /**
409
+ * an array of rules violated by this dependency - left out if the dependency
410
+ * is valid
411
+ */
412
+ rules?: IRuleSummary[];
413
413
  }
414
414
 
415
415
  export interface IFolderDependent {
416
- /**
417
- * name ('path') of the dependent
418
- */
419
- name: string;
416
+ /**
417
+ * name ('path') of the dependent
418
+ */
419
+ name: string;
420
420
  }
421
421
 
422
422
  export interface IFolder {
423
- /**
424
- * The name of the folder. FOlder names are normalized to posix (so
425
- * separated by forward slashes e.g.: src/things/morethings)
426
- */
427
- name: string;
428
- /**
429
- * List of folders depending on this folder
430
- */
431
- dependents?: IFolderDependent[];
432
- /**
433
- * List of folders this folder depends upon
434
- */
435
- dependencies?: IFolderDependency[];
436
- /**
437
- * The total number of modules detected in this folder and its sub-folders
438
- */
439
- moduleCount: number;
440
- /**
441
- * The number of modules outside this folder that depend on modules
442
- * within this folder. Only present when dependency-cruiser was
443
- * "asked to calculate it.
444
- */
445
- afferentCouplings?: number;
446
- /**
447
- * The number of modules inside this folder that depend on modules
448
- * outside this folder. Only present when dependency-cruiser was
449
- * asked to calculate it.
450
- */
451
- efferentCouplings?: number;
452
- /**
453
- * efferentCouplings/ (afferentCouplings + efferentCouplings)
454
- *
455
- * A measure for how stable the folder is; ranging between 0
456
- * (completely stable folder) to 1 (completely instable folder)
457
- * Note that while 'instability' has a negative connotation it's also
458
- * (unavoidable in any meaningful system. It's the basis of Martin's
459
- * variable component stability principle: 'the instability of a folder
460
- * should be larger than the folders it depends on'. Only present when
461
- * dependency-cruiser was asked to calculate it.,
462
- */
463
- instability?: number;
464
- /**
465
- * a collection of stats that are not part of the regular output, but
466
- * might be interesting for further analysis
467
- */
468
- experimentalStats?: ExperimentalStatsType;
423
+ /**
424
+ * The name of the folder. FOlder names are normalized to posix (so
425
+ * separated by forward slashes e.g.: src/things/morethings)
426
+ */
427
+ name: string;
428
+ /**
429
+ * List of folders depending on this folder
430
+ */
431
+ dependents?: IFolderDependent[];
432
+ /**
433
+ * List of folders this folder depends upon
434
+ */
435
+ dependencies?: IFolderDependency[];
436
+ /**
437
+ * The total number of modules detected in this folder and its sub-folders
438
+ */
439
+ moduleCount: number;
440
+ /**
441
+ * The number of modules outside this folder that depend on modules
442
+ * within this folder. Only present when dependency-cruiser was
443
+ * "asked to calculate it.
444
+ */
445
+ afferentCouplings?: number;
446
+ /**
447
+ * The number of modules inside this folder that depend on modules
448
+ * outside this folder. Only present when dependency-cruiser was
449
+ * asked to calculate it.
450
+ */
451
+ efferentCouplings?: number;
452
+ /**
453
+ * efferentCouplings/ (afferentCouplings + efferentCouplings)
454
+ *
455
+ * A measure for how stable the folder is; ranging between 0
456
+ * (completely stable folder) to 1 (completely instable folder)
457
+ * Note that while 'instability' has a negative connotation it's also
458
+ * (unavoidable in any meaningful system. It's the basis of Martin's
459
+ * variable component stability principle: 'the instability of a folder
460
+ * should be larger than the folders it depends on'. Only present when
461
+ * dependency-cruiser was asked to calculate it.,
462
+ */
463
+ instability?: number;
464
+ /**
465
+ * a collection of stats that are not part of the regular output, but
466
+ * might be interesting for further analysis
467
+ */
468
+ experimentalStats?: ExperimentalStatsType;
469
469
  }
470
470
 
471
471
  export type * from "./violations.mjs";