126
|
1 /** @type {import('dependency-cruiser').IConfiguration} */
|
|
2 module.exports = {
|
|
3 forbidden: [
|
|
4 /* rules from the 'recommended' preset: */
|
|
5 {
|
|
6 name: 'no-circular',
|
|
7 severity: 'warn',
|
|
8 comment:
|
|
9 'This dependency is part of a circular relationship. You might want to revise ' +
|
|
10 'your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ',
|
|
11 from: {},
|
|
12 to: {
|
|
13 circular: true
|
|
14 }
|
|
15 },
|
|
16 {
|
|
17 name: 'no-orphans',
|
|
18 comment:
|
|
19 "This is an orphan module - it's likely not used (anymore?). Either use it or " +
|
|
20 "remove it. If it's logical this module is an orphan (i.e. it's a config file), " +
|
|
21 "add an exception for it in your dependency-cruiser configuration. By default " +
|
|
22 "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " +
|
|
23 "files (.d.ts), tsconfig.json and some of the babel and webpack configs.",
|
|
24 severity: 'warn',
|
|
25 from: {
|
|
26 orphan: true,
|
|
27 pathNot: [
|
|
28 '(^|/)\\.[^/]+\\.(js|cjs|mjs|ts|json)$', // dot files
|
|
29 '\\.d\\.ts$', // TypeScript declaration files
|
|
30 '(^|/)tsconfig\\.json$', // TypeScript config
|
|
31 '(^|/)(babel|webpack)\\.config\\.(js|cjs|mjs|ts|json)$' // other configs
|
|
32 ]
|
|
33 },
|
|
34 to: {},
|
|
35 },
|
|
36 {
|
|
37 name: 'no-deprecated-core',
|
|
38 comment:
|
|
39 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' +
|
|
40 "bound to exist - node doesn't deprecate lightly.",
|
|
41 severity: 'warn',
|
|
42 from: {},
|
|
43 to: {
|
|
44 dependencyTypes: [
|
|
45 'core'
|
|
46 ],
|
|
47 path: [
|
|
48 '^(v8\/tools\/codemap)$',
|
|
49 '^(v8\/tools\/consarray)$',
|
|
50 '^(v8\/tools\/csvparser)$',
|
|
51 '^(v8\/tools\/logreader)$',
|
|
52 '^(v8\/tools\/profile_view)$',
|
|
53 '^(v8\/tools\/profile)$',
|
|
54 '^(v8\/tools\/SourceMap)$',
|
|
55 '^(v8\/tools\/splaytree)$',
|
|
56 '^(v8\/tools\/tickprocessor-driver)$',
|
|
57 '^(v8\/tools\/tickprocessor)$',
|
|
58 '^(node-inspect\/lib\/_inspect)$',
|
|
59 '^(node-inspect\/lib\/internal\/inspect_client)$',
|
|
60 '^(node-inspect\/lib\/internal\/inspect_repl)$',
|
|
61 '^(async_hooks)$',
|
|
62 '^(punycode)$',
|
|
63 '^(domain)$',
|
|
64 '^(constants)$',
|
|
65 '^(sys)$',
|
|
66 '^(_linklist)$',
|
|
67 '^(_stream_wrap)$'
|
|
68 ],
|
|
69 }
|
|
70 },
|
|
71 {
|
|
72 name: 'not-to-deprecated',
|
|
73 comment:
|
|
74 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' +
|
|
75 'version of that module, or find an alternative. Deprecated modules are a security risk.',
|
|
76 severity: 'warn',
|
|
77 from: {},
|
|
78 to: {
|
|
79 dependencyTypes: [
|
|
80 'deprecated'
|
|
81 ]
|
|
82 }
|
|
83 },
|
|
84 {
|
|
85 name: 'no-non-package-json',
|
|
86 severity: 'error',
|
|
87 comment:
|
|
88 "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " +
|
|
89 "That's problematic as the package either (1) won't be available on live (2 - worse) will be " +
|
|
90 "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " +
|
|
91 "in your package.json.",
|
|
92 from: {},
|
|
93 to: {
|
|
94 dependencyTypes: [
|
|
95 'npm-no-pkg',
|
|
96 'npm-unknown'
|
|
97 ]
|
|
98 }
|
|
99 },
|
|
100 {
|
|
101 name: 'not-to-unresolvable',
|
|
102 comment:
|
|
103 "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " +
|
|
104 'module: add it to your package.json. In all other cases you likely already know what to do.',
|
|
105 severity: 'error',
|
|
106 from: {},
|
|
107 to: {
|
|
108 couldNotResolve: true
|
|
109 }
|
|
110 },
|
|
111 {
|
|
112 name: 'no-duplicate-dep-types',
|
|
113 comment:
|
|
114 "Likely this module depends on an external ('npm') package that occurs more than once " +
|
|
115 "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " +
|
|
116 "maintenance problems later on.",
|
|
117 severity: 'warn',
|
|
118 from: {},
|
|
119 to: {
|
|
120 moreThanOneDependencyType: true,
|
|
121 // as it's pretty common to have a type import be a type only import
|
|
122 // _and_ (e.g.) a devDependency - don't consider type-only dependency
|
|
123 // types for this rule
|
|
124 dependencyTypesNot: ["type-only"]
|
|
125 }
|
|
126 },
|
|
127
|
|
128 /* rules you might want to tweak for your specific situation: */
|
|
129 {
|
|
130 name: 'not-to-spec',
|
|
131 comment:
|
|
132 'This module depends on a spec (test) file. The sole responsibility of a spec file is to test code. ' +
|
|
133 "If there's something in a spec that's of use to other modules, it doesn't have that single " +
|
|
134 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.',
|
|
135 severity: 'error',
|
|
136 from: {},
|
|
137 to: {
|
|
138 path: '\\.(spec|test)\\.(js|mjs|cjs|ts|ls|coffee|litcoffee|coffee\\.md)$'
|
|
139 }
|
|
140 },
|
|
141 {
|
|
142 name: 'not-to-dev-dep',
|
|
143 severity: 'error',
|
|
144 comment:
|
|
145 "This module depends on an npm package from the 'devDependencies' section of your " +
|
|
146 'package.json. It looks like something that ships to production, though. To prevent problems ' +
|
|
147 "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" +
|
|
148 'section of your package.json. If this module is development only - add it to the ' +
|
|
149 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration',
|
|
150 from: {
|
|
151 path: '^(src)',
|
|
152 pathNot: '\\.(spec|test)\\.(js|mjs|cjs|ts|ls|coffee|litcoffee|coffee\\.md)$'
|
|
153 },
|
|
154 to: {
|
|
155 dependencyTypes: [
|
|
156 'npm-dev'
|
|
157 ]
|
|
158 }
|
|
159 },
|
|
160 {
|
|
161 name: 'optional-deps-used',
|
|
162 severity: 'info',
|
|
163 comment:
|
|
164 "This module depends on an npm package that is declared as an optional dependency " +
|
|
165 "in your package.json. As this makes sense in limited situations only, it's flagged here. " +
|
|
166 "If you're using an optional dependency here by design - add an exception to your" +
|
|
167 "dependency-cruiser configuration.",
|
|
168 from: {},
|
|
169 to: {
|
|
170 dependencyTypes: [
|
|
171 'npm-optional'
|
|
172 ]
|
|
173 }
|
|
174 },
|
|
175 {
|
|
176 name: 'peer-deps-used',
|
|
177 comment:
|
|
178 "This module depends on an npm package that is declared as a peer dependency " +
|
|
179 "in your package.json. This makes sense if your package is e.g. a plugin, but in " +
|
|
180 "other cases - maybe not so much. If the use of a peer dependency is intentional " +
|
|
181 "add an exception to your dependency-cruiser configuration.",
|
|
182 severity: 'warn',
|
|
183 from: {},
|
|
184 to: {
|
|
185 dependencyTypes: [
|
|
186 'npm-peer'
|
|
187 ]
|
|
188 }
|
|
189 }
|
|
190 ],
|
|
191 options: {
|
|
192
|
|
193 /* conditions specifying which files not to follow further when encountered:
|
|
194 - path: a regular expression to match
|
|
195 - dependencyTypes: see https://github.com/sverweij/dependency-cruiser/blob/master/doc/rules-reference.md#dependencytypes-and-dependencytypesnot
|
|
196 for a complete list
|
|
197 */
|
|
198 doNotFollow: {
|
|
199 path: 'node_modules'
|
|
200 },
|
|
201
|
|
202 /* conditions specifying which dependencies to exclude
|
|
203 - path: a regular expression to match
|
|
204 - dynamic: a boolean indicating whether to ignore dynamic (true) or static (false) dependencies.
|
|
205 leave out if you want to exclude neither (recommended!)
|
|
206 */
|
|
207 exclude : {
|
|
208 path: '.*\.test\.ts',
|
|
209 // dynamic: true
|
|
210 },
|
|
211
|
|
212 /* pattern specifying which files to include (regular expression)
|
|
213 dependency-cruiser will skip everything not matching this pattern
|
|
214 */
|
|
215 // includeOnly : '',
|
|
216
|
|
217 /* dependency-cruiser will include modules matching against the focus
|
|
218 regular expression in its output, as well as their neighbours (direct
|
|
219 dependencies and dependents)
|
|
220 */
|
|
221 // focus : '',
|
|
222
|
|
223 /* list of module systems to cruise */
|
|
224 // moduleSystems: ['amd', 'cjs', 'es6', 'tsd'],
|
|
225
|
|
226 /* prefix for links in html and svg output (e.g. 'https://github.com/you/yourrepo/blob/develop/'
|
|
227 to open it on your online repo or `vscode://file/${process.cwd()}/` to
|
|
228 open it in visual studio code),
|
|
229 */
|
|
230 // prefix: '',
|
|
231
|
|
232 /* false (the default): ignore dependencies that only exist before typescript-to-javascript compilation
|
|
233 true: also detect dependencies that only exist before typescript-to-javascript compilation
|
|
234 "specify": for each dependency identify whether it only exists before compilation or also after
|
|
235 */
|
|
236 tsPreCompilationDeps: true,
|
|
237
|
|
238 /*
|
|
239 list of extensions to scan that aren't javascript or compile-to-javascript.
|
|
240 Empty by default. Only put extensions in here that you want to take into
|
|
241 account that are _not_ parsable.
|
|
242 */
|
|
243 // extraExtensionsToScan: [".json", ".jpg", ".png", ".svg", ".webp"],
|
|
244
|
|
245 /* if true combines the package.jsons found from the module up to the base
|
|
246 folder the cruise is initiated from. Useful for how (some) mono-repos
|
|
247 manage dependencies & dependency definitions.
|
|
248 */
|
|
249 // combinedDependencies: false,
|
|
250
|
|
251 /* if true leave symlinks untouched, otherwise use the realpath */
|
|
252 // preserveSymlinks: false,
|
|
253
|
|
254 /* TypeScript project file ('tsconfig.json') to use for
|
|
255 (1) compilation and
|
|
256 (2) resolution (e.g. with the paths property)
|
|
257
|
|
258 The (optional) fileName attribute specifies which file to take (relative to
|
|
259 dependency-cruiser's current working directory). When not provided
|
|
260 defaults to './tsconfig.json'.
|
|
261 */
|
|
262 tsConfig: {
|
|
263 fileName: 'tsconfig.json'
|
|
264 },
|
|
265
|
|
266 /* Webpack configuration to use to get resolve options from.
|
|
267
|
|
268 The (optional) fileName attribute specifies which file to take (relative
|
|
269 to dependency-cruiser's current working directory. When not provided defaults
|
|
270 to './webpack.conf.js'.
|
|
271
|
|
272 The (optional) `env` and `arguments` attributes contain the parameters to be passed if
|
|
273 your webpack config is a function and takes them (see webpack documentation
|
|
274 for details)
|
|
275 */
|
|
276 // webpackConfig: {
|
|
277 // fileName: './webpack.config.js',
|
|
278 // env: {},
|
|
279 // arguments: {},
|
|
280 // },
|
|
281
|
|
282 /* Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use
|
|
283 for compilation (and whatever other naughty things babel plugins do to
|
|
284 source code). This feature is well tested and usable, but might change
|
|
285 behavior a bit over time (e.g. more precise results for used module
|
|
286 systems) without dependency-cruiser getting a major version bump.
|
|
287 */
|
|
288 // babelConfig: {
|
|
289 // fileName: './.babelrc'
|
|
290 // },
|
|
291
|
|
292 /* List of strings you have in use in addition to cjs/ es6 requires
|
|
293 & imports to declare module dependencies. Use this e.g. if you've
|
|
294 re-declared require, use a require-wrapper or use window.require as
|
|
295 a hack.
|
|
296 */
|
|
297 // exoticRequireStrings: [],
|
|
298 /* options to pass on to enhanced-resolve, the package dependency-cruiser
|
|
299 uses to resolve module references to disk. You can set most of these
|
|
300 options in a webpack.conf.js - this section is here for those
|
|
301 projects that don't have a separate webpack config file.
|
|
302
|
|
303 Note: settings in webpack.conf.js override the ones specified here.
|
|
304 */
|
|
305 enhancedResolveOptions: {
|
|
306 /* List of strings to consider as 'exports' fields in package.json. Use
|
|
307 ['exports'] when you use packages that use such a field and your environment
|
|
308 supports it (e.g. node ^12.19 || >=14.7 or recent versions of webpack).
|
|
309
|
|
310 If you have an `exportsFields` attribute in your webpack config, that one
|
|
311 will have precedence over the one specified here.
|
|
312 */
|
|
313 exportsFields: ["exports"],
|
|
314 /* List of conditions to check for in the exports field. e.g. use ['imports']
|
|
315 if you're only interested in exposed es6 modules, ['require'] for commonjs,
|
|
316 or all conditions at once `(['import', 'require', 'node', 'default']`)
|
|
317 if anything goes for you. Only works when the 'exportsFields' array is
|
|
318 non-empty.
|
|
319
|
|
320 If you have a 'conditionNames' attribute in your webpack config, that one will
|
|
321 have precedence over the one specified here.
|
|
322 */
|
|
323 conditionNames: ["import", "require", "node", "default"],
|
|
324 /*
|
|
325 The extensions, by default are the same as the ones dependency-cruiser
|
|
326 can access (run `npx depcruise --info` to see which ones that are in
|
|
327 _your_ environment. If that list is larger than what you need (e.g.
|
|
328 it contains .js, .jsx, .ts, .tsx, .cts, .mts - but you don't use
|
|
329 TypeScript you can pass just the extensions you actually use (e.g.
|
|
330 [".js", ".jsx"]). This can speed up the most expensive step in
|
|
331 dependency cruising (module resolution) quite a bit.
|
|
332 */
|
|
333 // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"],
|
|
334 /*
|
|
335 If your TypeScript project makes use of types specified in 'types'
|
|
336 fields in package.jsons of external dependencies, specify "types"
|
|
337 in addition to "main" in here, so enhanced-resolve (the resolver
|
|
338 dependency-cruiser uses) knows to also look there. You can also do
|
|
339 this if you're not sure, but still use TypeScript. In a future version
|
|
340 of dependency-cruiser this will likely become the default.
|
|
341 */
|
|
342 mainFields: ["main", "types"],
|
|
343 },
|
|
344 reporterOptions: {
|
|
345 dot: {
|
|
346 /* pattern of modules that can be consolidated in the detailed
|
|
347 graphical dependency graph. The default pattern in this configuration
|
|
348 collapses everything in node_modules to one folder deep so you see
|
|
349 the external modules, but not the innards your app depends upon.
|
|
350 */
|
|
351 collapsePattern: 'node_modules/(@[^/]+/[^/]+|[^/]+)',
|
|
352
|
|
353 /* Options to tweak the appearance of your graph.See
|
|
354 https://github.com/sverweij/dependency-cruiser/blob/master/doc/options-reference.md#reporteroptions
|
|
355 for details and some examples. If you don't specify a theme
|
|
356 don't worry - dependency-cruiser will fall back to the default one.
|
|
357 */
|
|
358 // theme: {
|
|
359 // graph: {
|
|
360 // /* use splines: "ortho" for straight lines. Be aware though
|
|
361 // graphviz might take a long time calculating ortho(gonal)
|
|
362 // routings.
|
|
363 // */
|
|
364 // splines: "true"
|
|
365 // },
|
|
366 // modules: [
|
|
367 // {
|
|
368 // criteria: { matchesFocus: true },
|
|
369 // attributes: {
|
|
370 // fillcolor: "lime",
|
|
371 // penwidth: 2,
|
|
372 // },
|
|
373 // },
|
|
374 // {
|
|
375 // criteria: { matchesFocus: false },
|
|
376 // attributes: {
|
|
377 // fillcolor: "lightgrey",
|
|
378 // },
|
|
379 // },
|
|
380 // {
|
|
381 // criteria: { matchesReaches: true },
|
|
382 // attributes: {
|
|
383 // fillcolor: "lime",
|
|
384 // penwidth: 2,
|
|
385 // },
|
|
386 // },
|
|
387 // {
|
|
388 // criteria: { matchesReaches: false },
|
|
389 // attributes: {
|
|
390 // fillcolor: "lightgrey",
|
|
391 // },
|
|
392 // },
|
|
393 // {
|
|
394 // criteria: { source: "^src/model" },
|
|
395 // attributes: { fillcolor: "#ccccff" }
|
|
396 // },
|
|
397 // {
|
|
398 // criteria: { source: "^src/view" },
|
|
399 // attributes: { fillcolor: "#ccffcc" }
|
|
400 // },
|
|
401 // ],
|
|
402 // dependencies: [
|
|
403 // {
|
|
404 // criteria: { "rules[0].severity": "error" },
|
|
405 // attributes: { fontcolor: "red", color: "red" }
|
|
406 // },
|
|
407 // {
|
|
408 // criteria: { "rules[0].severity": "warn" },
|
|
409 // attributes: { fontcolor: "orange", color: "orange" }
|
|
410 // },
|
|
411 // {
|
|
412 // criteria: { "rules[0].severity": "info" },
|
|
413 // attributes: { fontcolor: "blue", color: "blue" }
|
|
414 // },
|
|
415 // {
|
|
416 // criteria: { resolved: "^src/model" },
|
|
417 // attributes: { color: "#0000ff77" }
|
|
418 // },
|
|
419 // {
|
|
420 // criteria: { resolved: "^src/view" },
|
|
421 // attributes: { color: "#00770077" }
|
|
422 // }
|
|
423 // ]
|
|
424 // }
|
|
425 },
|
|
426 archi: {
|
|
427 /* pattern of modules that can be consolidated in the high level
|
|
428 graphical dependency graph. If you use the high level graphical
|
|
429 dependency graph reporter (`archi`) you probably want to tweak
|
|
430 this collapsePattern to your situation.
|
|
431 */
|
|
432 collapsePattern: '^(packages|src|lib|app|bin|test(s?)|spec(s?))/[^/]+|node_modules/(@[^/]+/[^/]+|[^/]+)',
|
|
433
|
|
434 /* Options to tweak the appearance of your graph.See
|
|
435 https://github.com/sverweij/dependency-cruiser/blob/master/doc/options-reference.md#reporteroptions
|
|
436 for details and some examples. If you don't specify a theme
|
|
437 for 'archi' dependency-cruiser will use the one specified in the
|
|
438 dot section (see above), if any, and otherwise use the default one.
|
|
439 */
|
|
440 // theme: {
|
|
441 // },
|
|
442 },
|
|
443 "text": {
|
|
444 "highlightFocused": true
|
|
445 },
|
|
446 }
|
|
447 }
|
|
448 };
|
|
449 // generated: dependency-cruiser@12.12.0 on 2023-05-05T19:06:19.143Z
|