dependency-cruiser 13.1.3 → 13.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dependency-cruiser",
3
- "version": "13.1.3",
3
+ "version": "13.1.4",
4
4
  "description": "Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.",
5
5
  "keywords": [
6
6
  "static analysis",
@@ -159,7 +159,6 @@
159
159
  "enhanced-resolve": "5.15.0",
160
160
  "figures": "5.0.0",
161
161
  "glob": "10.3.3",
162
- "handlebars": "4.7.8",
163
162
  "ignore": "5.2.4",
164
163
  "indent-string": "5.0.0",
165
164
  "interpret": "^3.1.1",
@@ -180,12 +179,12 @@
180
179
  "@babel/core": "7.22.10",
181
180
  "@babel/plugin-transform-modules-commonjs": "7.22.5",
182
181
  "@babel/preset-typescript": "7.22.5",
183
- "@swc/core": "1.3.76",
182
+ "@swc/core": "1.3.78",
184
183
  "@types/lodash": "4.14.197",
185
- "@types/node": "20.4.10",
184
+ "@types/node": "20.5.1",
186
185
  "@types/prompts": "2.4.4",
187
- "@typescript-eslint/eslint-plugin": "6.3.0",
188
- "@typescript-eslint/parser": "6.3.0",
186
+ "@typescript-eslint/eslint-plugin": "6.4.0",
187
+ "@typescript-eslint/parser": "6.4.0",
189
188
  "@vue/compiler-sfc": "3.3.4",
190
189
  "c8": "8.0.1",
191
190
  "coffeescript": "2.7.0",
@@ -194,18 +193,18 @@
194
193
  "eslint-config-prettier": "9.0.0",
195
194
  "eslint-plugin-budapestian": "5.0.1",
196
195
  "eslint-plugin-eslint-comments": "3.2.0",
197
- "eslint-plugin-import": "2.28.0",
196
+ "eslint-plugin-import": "2.28.1",
198
197
  "eslint-plugin-mocha": "10.1.0",
199
198
  "eslint-plugin-node": "11.1.0",
200
199
  "eslint-plugin-security": "1.7.1",
201
200
  "eslint-plugin-unicorn": "^48.0.1",
202
201
  "husky": "8.0.3",
203
202
  "intercept-stdout": "0.1.2",
204
- "lint-staged": "13.3.0",
203
+ "lint-staged": "14.0.0",
205
204
  "mocha": "10.2.0",
206
205
  "normalize-newline": "4.1.0",
207
206
  "npm-run-all": "4.1.5",
208
- "prettier": "3.0.1",
207
+ "prettier": "3.0.2",
209
208
  "proxyquire": "2.1.3",
210
209
  "shx": "0.3.4",
211
210
  "svelte": "3.59.1",
@@ -99,7 +99,7 @@ function buildWebpackConfigAttribute(pInitOptions) {
99
99
  // env: {},
100
100
  // arguments: {}
101
101
  },`
102
- : `// webpackConfig: {
102
+ : `// webpackConfig: {
103
103
  // fileName: 'webpack.config.js',
104
104
  // env: {},
105
105
  // arguments: {}
@@ -136,8 +136,8 @@ function buildExtensionsAttribute(pInitOptions) {
136
136
  */
137
137
  function buildMainFieldsAttribute(pInitOptions) {
138
138
  return pInitOptions.usesTypeScript
139
- ? `mainFields: ["main", "types"],`
140
- : `// mainFields: ["main", "types"],`;
139
+ ? `mainFields: ["main", "types", "typings"],`
140
+ : `// mainFields: ["main", "types", "typings"],`;
141
141
  }
142
142
 
143
143
  /**
package/src/meta.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /* generated - don't edit */
2
2
 
3
3
  module.exports = {
4
- version: "13.1.3",
4
+ version: "13.1.4",
5
5
  engines: {
6
6
  node: "^16.14||>=18",
7
7
  },
@@ -1,4 +1,4 @@
1
- import Handlebars from "handlebars/runtime.js";
1
+ /* eslint-disable prefer-template */
2
2
  import get from "lodash/get.js";
3
3
  import { applyFilters } from "../../graph-utl/filter-bank.mjs";
4
4
  import theming from "./theming.mjs";
@@ -7,7 +7,8 @@ import prepareFolderLevel from "./prepare-folder-level.mjs";
7
7
  import prepareCustomLevel from "./prepare-custom-level.mjs";
8
8
  import prepareFlatLevel from "./prepare-flat-level.mjs";
9
9
 
10
- await import("./dot.template.js");
10
+ // not importing EOL from "node:os" so output is the same on windows and unices
11
+ const EOL = "\n";
11
12
 
12
13
  const GRANULARITY2FUNCTION = new Map([
13
14
  ["module", prepareCustomLevel],
@@ -16,10 +17,108 @@ const GRANULARITY2FUNCTION = new Map([
16
17
  ["flat", prepareFlatLevel],
17
18
  ]);
18
19
 
20
+ const GRANULARITY2REPORTER_OPTIONS = new Map([
21
+ ["module", "summary.optionsUsed.reporterOptions.dot"],
22
+ ["folder", "summary.optionsUsed.reporterOptions.ddot"],
23
+ ["custom", "summary.optionsUsed.reporterOptions.archi"],
24
+ ["flat", "summary.optionsUsed.reporterOptions.flat"],
25
+ ]);
26
+
27
+ function buildGraphAttributes(pGraph) {
28
+ return Boolean(pGraph)
29
+ ? ` ${moduleUtl.attributizeObject(pGraph || {})}`
30
+ : "";
31
+ }
32
+
33
+ function buildNodeAttributes(pNode) {
34
+ return Boolean(pNode)
35
+ ? ` node [${moduleUtl.attributizeObject(pNode || {})}]`
36
+ : "";
37
+ }
38
+
39
+ function buildEdgeAttributes(pEdge) {
40
+ return Boolean(pEdge)
41
+ ? ` edge [${moduleUtl.attributizeObject(pEdge || {})}]`
42
+ : "";
43
+ }
44
+
45
+ function buildGeneralAttributes(pTheme) {
46
+ return (
47
+ buildGraphAttributes(pTheme.graph) +
48
+ EOL +
49
+ buildNodeAttributes(pTheme.node) +
50
+ EOL +
51
+ buildEdgeAttributes(pTheme.edge) +
52
+ EOL
53
+ );
54
+ }
55
+
56
+ function buildSingleFlatModule(pModule) {
57
+ return `"${pModule.source}" [label=${pModule.label} tooltip="${
58
+ pModule.tooltip
59
+ }" ${pModule.URL ? 'URL="' + pModule.URL + '" ' : ""}${
60
+ pModule.themeAttrs ?? ""
61
+ }]`;
62
+ }
63
+
64
+ function buildSinglePath(pClustersHaveOwnNode) {
65
+ return (pPath) => {
66
+ let lReturnValue = `subgraph "cluster_${pPath.aggregateSnippet}" {label="${pPath.snippet}"`;
67
+ if (pClustersHaveOwnNode) {
68
+ lReturnValue += ` "${pPath.aggregateSnippet}" [width="0.05" shape="point" style="invis"]`;
69
+ }
70
+ return lReturnValue;
71
+ };
72
+ }
73
+
74
+ function buildModuleHierarchy(pModule, pClustersHaveOwnNode) {
75
+ return (
76
+ pModule.path.map(buildSinglePath(pClustersHaveOwnNode)).join(" ") +
77
+ " " +
78
+ buildSingleFlatModule(pModule) +
79
+ " }".repeat(pModule.path.length)
80
+ );
81
+ }
82
+
83
+ function buildDependency(pModuleSource) {
84
+ return (pDependency) => {
85
+ let lReturnValue = ` "${pModuleSource}" -> "${pDependency.resolved}"`;
86
+ if (pDependency.hasExtraAttributes) {
87
+ lReturnValue +=
88
+ " [" +
89
+ (pDependency?.rule?.name
90
+ ? `xlabel="${pDependency.rule.name}" tooltip="${pDependency.rule.name}" `
91
+ : "") +
92
+ (pDependency?.themeAttrs ?? "") +
93
+ "]";
94
+ }
95
+ return lReturnValue;
96
+ };
97
+ }
98
+
99
+ function buildModule(pClustersHaveOwnNode) {
100
+ return (pModule) => {
101
+ let lReturnValue = pModule.folder
102
+ ? ` ${buildModuleHierarchy(pModule, pClustersHaveOwnNode)}`
103
+ : ` ${buildSingleFlatModule(pModule)}`;
104
+ if (pModule.dependencies && pModule.dependencies.length > 0) {
105
+ lReturnValue +=
106
+ EOL +
107
+ pModule.dependencies.map(buildDependency(pModule.source)).join(EOL);
108
+ }
109
+
110
+ return lReturnValue;
111
+ };
112
+ }
113
+
114
+ function buildModules(pModules, pClustersHaveOwnNode) {
115
+ return pModules.map(buildModule(pClustersHaveOwnNode)).join(EOL);
116
+ }
117
+
19
118
  function report(
20
119
  pResults,
21
120
  pGranularity,
22
- { theme, collapsePattern, filters, showMetrics }
121
+ { theme, collapsePattern, filters, showMetrics },
23
122
  ) {
24
123
  const lTheme = theming.normalizeTheme(theme);
25
124
  const lResults = filters
@@ -29,62 +128,59 @@ function report(
29
128
  }
30
129
  : pResults;
31
130
 
32
- return Handlebars.templates["dot.template.hbs"]({
33
- graphAttrs: moduleUtl.attributizeObject(lTheme.graph || {}),
34
- nodeAttrs: moduleUtl.attributizeObject(lTheme.node || {}),
35
- edgeAttrs: moduleUtl.attributizeObject(lTheme.edge || {}),
36
- clustersHaveOwnNode: "folder" === pGranularity,
37
-
38
- modules: (GRANULARITY2FUNCTION.get(pGranularity) || prepareCustomLevel)(
39
- lResults,
40
- lTheme,
41
- collapsePattern,
42
- showMetrics
43
- ),
44
- });
131
+ return (
132
+ 'strict digraph "dependency-cruiser output"{' +
133
+ EOL +
134
+ buildGeneralAttributes(lTheme) +
135
+ EOL +
136
+ buildModules(
137
+ (GRANULARITY2FUNCTION.get(pGranularity) || prepareCustomLevel)(
138
+ lResults,
139
+ lTheme,
140
+ collapsePattern,
141
+ showMetrics,
142
+ ),
143
+ pGranularity === "folder",
144
+ ) +
145
+ EOL +
146
+ `}${EOL}`
147
+ );
45
148
  }
46
149
 
47
- const GRANULARITY2REPORTER_OPTIONS = new Map([
48
- ["module", "summary.optionsUsed.reporterOptions.dot"],
49
- ["folder", "summary.optionsUsed.reporterOptions.ddot"],
50
- ["custom", "summary.optionsUsed.reporterOptions.archi"],
51
- ["flat", "summary.optionsUsed.reporterOptions.flat"],
52
- ]);
53
-
54
150
  function pryReporterOptionsFromResults(pGranularity, pResults) {
55
151
  const lFallbackReporterOptions = get(
56
152
  pResults,
57
- "summary.optionsUsed.reporterOptions.dot"
153
+ "summary.optionsUsed.reporterOptions.dot",
58
154
  );
59
155
 
60
156
  return get(
61
157
  pResults,
62
158
  GRANULARITY2REPORTER_OPTIONS.get(pGranularity),
63
- lFallbackReporterOptions
159
+ lFallbackReporterOptions,
64
160
  );
65
161
  }
66
162
 
67
163
  function pryThemeFromResults(pGranularity, pResults) {
68
164
  const lFallbackTheme = get(
69
165
  pResults,
70
- "summary.optionsUsed.reporterOptions.dot.theme"
166
+ "summary.optionsUsed.reporterOptions.dot.theme",
71
167
  );
72
168
  return get(
73
169
  pryReporterOptionsFromResults(pGranularity, pResults),
74
170
  "theme",
75
- lFallbackTheme
171
+ lFallbackTheme,
76
172
  );
77
173
  }
78
174
 
79
175
  function pryFiltersFromResults(pGranularity, pResults) {
80
176
  const lFallbackFilters = get(
81
177
  pResults,
82
- "summary.optionsUsed.reporterOptions.dot.filters"
178
+ "summary.optionsUsed.reporterOptions.dot.filters",
83
179
  );
84
180
  return get(
85
181
  pryReporterOptionsFromResults(pGranularity, pResults),
86
182
  "filters",
87
- lFallbackFilters
183
+ lFallbackFilters,
88
184
  );
89
185
  }
90
186
 
@@ -99,14 +195,14 @@ function pryCollapsePatternFromResults(pGranularity, pResults) {
99
195
  return get(
100
196
  pryReporterOptionsFromResults(pGranularity, pResults),
101
197
  "collapsePattern",
102
- getCollapseFallbackPattern(pGranularity)
198
+ getCollapseFallbackPattern(pGranularity),
103
199
  );
104
200
  }
105
201
 
106
202
  function normalizeDotReporterOptions(
107
203
  pDotReporterOptions,
108
204
  pGranularity,
109
- pResults
205
+ pResults,
110
206
  ) {
111
207
  let lDotReporterOptions = pDotReporterOptions || {};
112
208
 
@@ -136,7 +232,7 @@ export default function produceDotReporter(pGranularity) {
136
232
  const lDotReporterOptions = normalizeDotReporterOptions(
137
233
  pDotReporterOptions,
138
234
  pGranularity,
139
- pResults
235
+ pResults,
140
236
  );
141
237
 
142
238
  return {
@@ -69,8 +69,12 @@ function constructViolatedRulesTable(pResults) {
69
69
  </table>`;
70
70
  }
71
71
 
72
+ /**
73
+ * @param {import('../../../types/cruise-result.js').IViolation} pViolation
74
+ * @returns {string}
75
+ */
72
76
  function getViolationRowClass(pViolation) {
73
- return pViolation.ignored ? ' class="ignored"' : "";
77
+ return pViolation.rule.severity === "ignore" ? ' class="ignored"' : "";
74
78
  }
75
79
 
76
80
  /**
@@ -278,7 +278,8 @@ export interface ICruiseOptions {
278
278
  * A list of main fields in manifests (package.json s). Typically you'd want
279
279
  * to keep leave this this on its default (['main']) , but if you e.g. use
280
280
  * external packages that only expose types, and you still want references
281
- * to these types to be resolved you could expand this to ['main', 'types']
281
+ * to these types to be resolved you could expand this to
282
+ * ['main', 'types', 'typings']
282
283
  */
283
284
  mainFields?: string[];
284
285
  /**
@@ -1 +0,0 @@
1
- var Handlebars=require("handlebars/runtime"),template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates||{};templates["dot.template.hbs"]=template({1:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return null!=(a="function"==typeof(e=null!=(e=a(e,"graphAttrs")||(null!=n?a(n,"graphAttrs"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"graphAttrs",hash:{},data:o,loc:{start:{line:2,column:22},end:{line:2,column:38}}}):e)?a:""},3:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return"node ["+(null!=(a="function"==typeof(e=null!=(e=a(e,"nodeAttrs")||(null!=n?a(n,"nodeAttrs"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"nodeAttrs",hash:{},data:o,loc:{start:{line:3,column:27},end:{line:3,column:42}}}):e)?a:"")+"]"},5:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return"edge ["+(null!=(a="function"==typeof(e=null!=(e=a(e,"edgeAttrs")||(null!=n?a(n,"edgeAttrs"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"edgeAttrs",hash:{},data:o,loc:{start:{line:4,column:27},end:{line:4,column:42}}}):e)?a:"")+"]"},7:function(l,n,e,t,o,a,r){var u=null!=n?n:l.nullContext||{},i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},c=null!=(p=i(e,"if").call(u,null!=n?i(n,"folder"):n,{name:"if",hash:{},fn:l.program(8,o,0,a,r),inverse:l.program(18,o,0,a,r),data:o,loc:{start:{line:7,column:4},end:{line:12,column:11}}}))?p:"",s=null!=(s=i(e,"dependencies")||(null!=n?i(n,"dependencies"):n))?s:l.hooks.helperMissing,a={name:"dependencies",hash:{},fn:l.program(20,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:13,column:4},end:{line:15,column:21}}},p="function"==typeof s?s.call(u,a):s;return null!=(p=i(e,"dependencies")?p:l.hooks.blockHelperMissing.call(n,p,a))&&(c+=p),c},8:function(l,n,e,t,o,a,r){var u,i,c=null!=n?n:l.nullContext||{},s=l.hooks.helperMissing,p="function",m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" "+(null!=(u=m(e,"each").call(c,null!=n?m(n,"path"):n,{name:"each",hash:{},fn:l.program(9,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:8,column:4},end:{line:8,column:201}}}))?u:"")+'"'+(null!=(u=typeof(i=null!=(i=m(e,"source")||(null!=n?m(n,"source"):n))?i:s)==p?i.call(c,{name:"source",hash:{},data:o,loc:{start:{line:9,column:9},end:{line:9,column:21}}}):i)?u:"")+'" [label='+(null!=(u=typeof(i=null!=(i=m(e,"label")||(null!=n?m(n,"label"):n))?i:s)==p?i.call(c,{name:"label",hash:{},data:o,loc:{start:{line:9,column:30},end:{line:9,column:41}}}):i)?u:"")+' tooltip="'+(null!=(u=typeof(i=null!=(i=m(e,"tooltip")||(null!=n?m(n,"tooltip"):n))?i:s)==p?i.call(c,{name:"tooltip",hash:{},data:o,loc:{start:{line:9,column:51},end:{line:9,column:64}}}):i)?u:"")+'" '+(null!=(u=m(e,"if").call(c,null!=n?m(n,"URL"):n,{name:"if",hash:{},fn:l.program(12,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:9,column:66},end:{line:9,column:100}}}))?u:"")+(null!=(u=m(e,"if").call(c,null!=n?m(n,"themeAttrs"):n,{name:"if",hash:{},fn:l.program(14,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:9,column:100},end:{line:9,column:141}}}))?u:"")+"]"+(null!=(u=m(e,"each").call(c,null!=n?m(n,"path"):n,{name:"each",hash:{},fn:l.program(16,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:9,column:142},end:{line:9,column:167}}}))?u:"")+"\n"},9:function(l,n,e,t,o,a,r){var u,i,c=null!=n?n:l.nullContext||{},s=l.hooks.helperMissing,p="function",m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'subgraph "cluster_'+(null!=(u=typeof(i=null!=(i=m(e,"aggregateSnippet")||(null!=n?m(n,"aggregateSnippet"):n))?i:s)==p?i.call(c,{name:"aggregateSnippet",hash:{},data:o,loc:{start:{line:8,column:36},end:{line:8,column:58}}}):i)?u:"")+'" {label="'+(null!=(u=typeof(i=null!=(i=m(e,"snippet")||(null!=n?m(n,"snippet"):n))?i:s)==p?i.call(c,{name:"snippet",hash:{},data:o,loc:{start:{line:8,column:68},end:{line:8,column:81}}}):i)?u:"")+'" '+(null!=(u=m(e,"if").call(c,null!=r[2]?m(r[2],"clustersHaveOwnNode"):r[2],{name:"if",hash:{},fn:l.program(10,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:8,column:83},end:{line:8,column:191}}}))?u:"")},10:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'"'+(null!=(a="function"==typeof(e=null!=(e=a(e,"aggregateSnippet")||(null!=n?a(n,"aggregateSnippet"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"aggregateSnippet",hash:{},data:o,loc:{start:{line:8,column:117},end:{line:8,column:139}}}):e)?a:"")+'" [width="0.05" shape="point" style="invis"] '},12:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'URL="'+(null!=(a="function"==typeof(e=null!=(e=a(e,"URL")||(null!=n?a(n,"URL"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"URL",hash:{},data:o,loc:{start:{line:9,column:82},end:{line:9,column:91}}}):e)?a:"")+'" '},14:function(l,n,e,t,o){var a=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return null!=(a="function"==typeof(e=null!=(e=a(e,"themeAttrs")||(null!=n?a(n,"themeAttrs"):n))?e:l.hooks.helperMissing)?e.call(null!=n?n:l.nullContext||{},{name:"themeAttrs",hash:{},data:o,loc:{start:{line:9,column:118},end:{line:9,column:134}}}):e)?a:""},16:function(l,n,e,t,o){return" }"},18:function(l,n,e,t,o,a,r){var u,i,c=null!=n?n:l.nullContext||{},s=l.hooks.helperMissing,p="function",m=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(u=typeof(i=null!=(i=m(e,"source")||(null!=n?m(n,"source"):n))?i:s)==p?i.call(c,{name:"source",hash:{},data:o,loc:{start:{line:11,column:5},end:{line:11,column:17}}}):i)?u:"")+'" [label='+(null!=(u=typeof(i=null!=(i=m(e,"label")||(null!=n?m(n,"label"):n))?i:s)==p?i.call(c,{name:"label",hash:{},data:o,loc:{start:{line:11,column:26},end:{line:11,column:37}}}):i)?u:"")+' tooltip="'+(null!=(u=typeof(i=null!=(i=m(e,"tooltip")||(null!=n?m(n,"tooltip"):n))?i:s)==p?i.call(c,{name:"tooltip",hash:{},data:o,loc:{start:{line:11,column:47},end:{line:11,column:60}}}):i)?u:"")+'" '+(null!=(u=m(e,"if").call(c,null!=n?m(n,"URL"):n,{name:"if",hash:{},fn:l.program(12,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:11,column:62},end:{line:11,column:96}}}))?u:"")+(null!=(u=m(e,"if").call(c,null!=n?m(n,"themeAttrs"):n,{name:"if",hash:{},fn:l.program(14,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:11,column:96},end:{line:11,column:137}}}))?u:"")+"]\n"},20:function(l,n,e,t,o,a,r){var u,i,c=null!=n?n:l.nullContext||{},s=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return' "'+(null!=(u=l.lambda(null!=r[1]?s(r[1],"source"):r[1],n))?u:"")+'" -> "'+(null!=(u="function"==typeof(i=null!=(i=s(e,"resolved")||(null!=n?s(n,"resolved"):n))?i:l.hooks.helperMissing)?i.call(c,{name:"resolved",hash:{},data:o,loc:{start:{line:14,column:26},end:{line:14,column:40}}}):i)?u:"")+'"'+(null!=(u=s(e,"if").call(c,null!=n?s(n,"hasExtraAttributes"):n,{name:"if",hash:{},fn:l.program(21,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:14,column:41},end:{line:14,column:193}}}))?u:"")+"\n"},21:function(l,n,e,t,o,a,r){var u,i=null!=n?n:l.nullContext||{},c=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return" ["+(null!=(u=c(e,"if").call(i,null!=(u=null!=n?c(n,"rule"):n)?c(u,"name"):u,{name:"if",hash:{},fn:l.program(22,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:14,column:69},end:{line:14,column:144}}}))?u:"")+(null!=(u=c(e,"if").call(i,null!=n?c(n,"themeAttrs"):n,{name:"if",hash:{},fn:l.program(14,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:14,column:144},end:{line:14,column:185}}}))?u:"")+"]"},22:function(l,n,e,t,o){var a,r=l.lambda,l=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]};return'xlabel="'+(null!=(a=r(null!=(a=null!=n?l(n,"rule"):n)?l(a,"name"):a,n))?a:"")+'" tooltip="'+(null!=(a=r(null!=(a=null!=n?l(n,"rule"):n)?l(a,"name"):a,n))?a:"")+'" '},compiler:[8,">= 4.3.0"],main:function(l,n,e,t,o,a,r){var u=null!=n?n:l.nullContext||{},i=l.lookupProperty||function(l,n){if(Object.prototype.hasOwnProperty.call(l,n))return l[n]},c='strict digraph "dependency-cruiser output"{\n '+(null!=(p=i(e,"if").call(u,null!=n?i(n,"graphAttrs"):n,{name:"if",hash:{},fn:l.program(1,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:2,column:4},end:{line:2,column:45}}}))?p:"")+"\n "+(null!=(p=i(e,"if").call(u,null!=n?i(n,"nodeAttrs"):n,{name:"if",hash:{},fn:l.program(3,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:3,column:4},end:{line:3,column:50}}}))?p:"")+"\n "+(null!=(p=i(e,"if").call(u,null!=n?i(n,"edgeAttrs"):n,{name:"if",hash:{},fn:l.program(5,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:4,column:4},end:{line:4,column:50}}}))?p:"")+"\n\n",s=null!=(s=i(e,"modules")||(null!=n?i(n,"modules"):n))?s:l.hooks.helperMissing,a={name:"modules",hash:{},fn:l.program(7,o,0,a,r),inverse:l.noop,data:o,loc:{start:{line:6,column:0},end:{line:16,column:12}}},p="function"==typeof s?s.call(u,a):s;return null!=(p=i(e,"modules")?p:l.hooks.blockHelperMissing.call(n,p,a))&&(c+=p),c+"}\n"},useData:!0,useDepths:!0});