@teambit/insights 1.0.919 → 1.0.921

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,129 @@
1
1
  import type { Component } from '@teambit/component';
2
2
  import { IssuesClasses } from '@teambit/component-issues';
3
3
  import type { GraphMain } from '@teambit/graph';
4
+ import chalk from 'chalk';
4
5
  import { uniq } from 'lodash';
5
6
  import type { Insight, InsightResult, RawResult } from '../insight';
6
7
  import type { RunInsightOptions } from '../insight-manager';
7
8
 
9
+ const MAX_HORIZONTAL_WIDTH = 90;
10
+ const ARROW = ' ───> ';
11
+ const ARROW_LEN = 8;
12
+
13
+ type ShortenedInfo = {
14
+ names: string[];
15
+ scope: string | undefined;
16
+ version: string | undefined;
17
+ };
18
+
19
+ function shortenNames(cycle: string[]): ShortenedInfo {
20
+ // cycle has the first element duplicated at the end; work with unique entries
21
+ const unique = cycle.slice(0, -1);
22
+
23
+ // extract scope: everything up to and including the last '/' before the component name
24
+ // e.g. "my-org.scope/ui/button@0.0.1" → scope "my-org.scope/ui", name "button", ver "0.0.1"
25
+ const parsed = unique.map((id) => {
26
+ const atIdx = id.lastIndexOf('@');
27
+ const version = atIdx > 0 ? id.slice(atIdx + 1) : undefined;
28
+ const withoutVer = atIdx > 0 ? id.slice(0, atIdx) : id;
29
+ const slashIdx = withoutVer.lastIndexOf('/');
30
+ const scope = slashIdx > 0 ? withoutVer.slice(0, slashIdx) : undefined;
31
+ const name = slashIdx > 0 ? withoutVer.slice(slashIdx + 1) : withoutVer;
32
+ return { scope, name, version };
33
+ });
34
+
35
+ // common scope: only if ALL entries share the same scope
36
+ const scopes = new Set(parsed.map((p) => p.scope));
37
+ const commonScope = scopes.size === 1 ? parsed[0].scope : undefined;
38
+
39
+ // common version: only if ALL entries share the same version
40
+ const versions = new Set(parsed.map((p) => p.version));
41
+ const commonVersion = versions.size === 1 ? parsed[0].version : undefined;
42
+
43
+ const names = parsed.map((p) => {
44
+ let display = commonScope ? p.name : p.scope ? `${p.scope}/${p.name}` : p.name;
45
+ if (!commonVersion && p.version) {
46
+ display += `@${p.version}`;
47
+ }
48
+ return display;
49
+ });
50
+
51
+ return { names, scope: commonScope, version: commonVersion };
52
+ }
53
+
54
+ function renderHeader(
55
+ cycleIndex: number | undefined,
56
+ totalCycles: number,
57
+ componentCount: number,
58
+ scope: string | undefined,
59
+ version: string | undefined
60
+ ): string {
61
+ const isSelf = componentCount === 1;
62
+ let header = '';
63
+
64
+ if (totalCycles > 1 && cycleIndex !== undefined) {
65
+ header += `Cycle ${cycleIndex + 1} of ${totalCycles}`;
66
+ } else {
67
+ header += 'Cycle';
68
+ }
69
+
70
+ header += isSelf ? ' - self-dependency' : ` - ${componentCount} components`;
71
+
72
+ if (scope) header += ` (scope: ${scope})`;
73
+ if (version) header += ` @${version}`;
74
+
75
+ return chalk.bold(header);
76
+ }
77
+
78
+ function renderSelfCycle(name: string): string {
79
+ return ` ${chalk.cyan(name)} ⟲`;
80
+ }
81
+
82
+ function renderHorizontal(names: string[]): string {
83
+ // build chain: name0 ───> name1 ───> name2
84
+ const chainParts: string[] = [];
85
+ const plainParts: string[] = [];
86
+ for (let i = 0; i < names.length; i++) {
87
+ chainParts.push(chalk.cyan(names[i]));
88
+ plainParts.push(names[i]);
89
+ if (i < names.length - 1) {
90
+ chainParts.push(chalk.dim(ARROW));
91
+ plainParts.push(ARROW);
92
+ }
93
+ }
94
+
95
+ const chainStr = chainParts.join('');
96
+ const plainLen = plainParts.join('').length;
97
+
98
+ // the last segment connects to the closing edge: ───┘
99
+ const closingSuffix = chalk.red(' ───┘');
100
+ const closingSuffixLen = 6; // " ───┘"
101
+
102
+ const totalWidth = plainLen + closingSuffixLen;
103
+
104
+ // top bar spans from above ▼ (column 0) to the ┐ (at totalWidth - 1)
105
+ const topBar = chalk.red('┌') + chalk.red('─'.repeat(totalWidth - 2)) + chalk.red('┐');
106
+ const sideLine = ' '.repeat(totalWidth - 1) + chalk.red('│');
107
+ const entryArrow = chalk.red('▼') + ' '.repeat(totalWidth - 2) + chalk.red('│');
108
+
109
+ const lines = [topBar, sideLine, entryArrow, chainStr + closingSuffix];
110
+ return lines.join('\n');
111
+ }
112
+
113
+ function renderVertical(names: string[]): string {
114
+ const lines: string[] = [];
115
+ for (let i = 0; i < names.length; i++) {
116
+ lines.push(chalk.cyan(names[i]));
117
+ if (i < names.length - 1) {
118
+ lines.push(chalk.dim(' │'));
119
+ lines.push(chalk.dim(' ▼'));
120
+ }
121
+ }
122
+ // back-edge to start
123
+ lines.push(chalk.red(` ╰───▶ `) + chalk.cyan(names[0]) + chalk.dim(' (back to start)'));
124
+ return lines.join('\n');
125
+ }
126
+
8
127
  export const INSIGHT_CIRCULAR_DEPS_NAME = 'circular';
9
128
 
10
129
  export default class FindCycles implements Insight {
@@ -38,17 +157,34 @@ export default class FindCycles implements Insight {
38
157
  }
39
158
 
40
159
  private renderData(data: RawResult) {
41
- if (data.data.length === 0) {
160
+ if (!data.data || data.data.length === 0) {
42
161
  return 'No cyclic dependencies';
43
162
  }
44
- const string = data.data
45
- .map((cycle) => {
46
- return `\nCyclic dependency (${cycle.length - 1} components)
47
- ---------------------------------
48
- - ${cycle.join('\n- ')}`;
49
- })
50
- .join('\n');
51
- return string;
163
+ const totalCycles = data.data.length;
164
+ const blocks = data.data.map((cycle: string[], idx: number) => {
165
+ const componentCount = cycle.length - 1; // last entry is duplicate of first
166
+ const { names, scope, version } = shortenNames(cycle);
167
+ const cycleIndex = totalCycles > 1 ? idx : undefined;
168
+ const header = renderHeader(cycleIndex, totalCycles, componentCount, scope, version);
169
+
170
+ let body: string;
171
+ if (componentCount === 1) {
172
+ body = renderSelfCycle(names[0]);
173
+ } else {
174
+ // measure horizontal width
175
+ const chainPlainLen = names.reduce((sum, n) => sum + n.length, 0) + (names.length - 1) * ARROW_LEN;
176
+ const horizontalWidth = chainPlainLen + 6; // + closing " ───┘"
177
+ if (horizontalWidth <= MAX_HORIZONTAL_WIDTH) {
178
+ body = renderHorizontal(names);
179
+ } else {
180
+ body = renderVertical(names);
181
+ }
182
+ }
183
+
184
+ return `${header}\n\n${body}`;
185
+ });
186
+
187
+ return '\n' + blocks.join('\n\n') + '\n';
52
188
  }
53
189
 
54
190
  async run(opts?: RunInsightOptions): Promise<InsightResult> {
@@ -72,7 +208,7 @@ export default class FindCycles implements Insight {
72
208
 
73
209
  async addAsComponentIssue(components: Component[]) {
74
210
  const result = await this.runInsight({ ids: components.map((c) => c.id) });
75
- if (!result.data.length) {
211
+ if (!result.data || !result.data.length) {
76
212
  return; // no circulars
77
213
  }
78
214
  const allIds = uniq(result.data.flat());
@@ -11,6 +11,13 @@ function _componentIssues() {
11
11
  };
12
12
  return data;
13
13
  }
14
+ function _chalk() {
15
+ const data = _interopRequireDefault(require("chalk"));
16
+ _chalk = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
14
21
  function _lodash() {
15
22
  const data = require("lodash");
16
23
  _lodash = function () {
@@ -18,9 +25,110 @@ function _lodash() {
18
25
  };
19
26
  return data;
20
27
  }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
29
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
22
30
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
23
31
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
32
+ const MAX_HORIZONTAL_WIDTH = 90;
33
+ const ARROW = ' ───> ';
34
+ const ARROW_LEN = 8;
35
+ function shortenNames(cycle) {
36
+ // cycle has the first element duplicated at the end; work with unique entries
37
+ const unique = cycle.slice(0, -1);
38
+
39
+ // extract scope: everything up to and including the last '/' before the component name
40
+ // e.g. "my-org.scope/ui/button@0.0.1" → scope "my-org.scope/ui", name "button", ver "0.0.1"
41
+ const parsed = unique.map(id => {
42
+ const atIdx = id.lastIndexOf('@');
43
+ const version = atIdx > 0 ? id.slice(atIdx + 1) : undefined;
44
+ const withoutVer = atIdx > 0 ? id.slice(0, atIdx) : id;
45
+ const slashIdx = withoutVer.lastIndexOf('/');
46
+ const scope = slashIdx > 0 ? withoutVer.slice(0, slashIdx) : undefined;
47
+ const name = slashIdx > 0 ? withoutVer.slice(slashIdx + 1) : withoutVer;
48
+ return {
49
+ scope,
50
+ name,
51
+ version
52
+ };
53
+ });
54
+
55
+ // common scope: only if ALL entries share the same scope
56
+ const scopes = new Set(parsed.map(p => p.scope));
57
+ const commonScope = scopes.size === 1 ? parsed[0].scope : undefined;
58
+
59
+ // common version: only if ALL entries share the same version
60
+ const versions = new Set(parsed.map(p => p.version));
61
+ const commonVersion = versions.size === 1 ? parsed[0].version : undefined;
62
+ const names = parsed.map(p => {
63
+ let display = commonScope ? p.name : p.scope ? `${p.scope}/${p.name}` : p.name;
64
+ if (!commonVersion && p.version) {
65
+ display += `@${p.version}`;
66
+ }
67
+ return display;
68
+ });
69
+ return {
70
+ names,
71
+ scope: commonScope,
72
+ version: commonVersion
73
+ };
74
+ }
75
+ function renderHeader(cycleIndex, totalCycles, componentCount, scope, version) {
76
+ const isSelf = componentCount === 1;
77
+ let header = '';
78
+ if (totalCycles > 1 && cycleIndex !== undefined) {
79
+ header += `Cycle ${cycleIndex + 1} of ${totalCycles}`;
80
+ } else {
81
+ header += 'Cycle';
82
+ }
83
+ header += isSelf ? ' - self-dependency' : ` - ${componentCount} components`;
84
+ if (scope) header += ` (scope: ${scope})`;
85
+ if (version) header += ` @${version}`;
86
+ return _chalk().default.bold(header);
87
+ }
88
+ function renderSelfCycle(name) {
89
+ return ` ${_chalk().default.cyan(name)} ⟲`;
90
+ }
91
+ function renderHorizontal(names) {
92
+ // build chain: name0 ───> name1 ───> name2
93
+ const chainParts = [];
94
+ const plainParts = [];
95
+ for (let i = 0; i < names.length; i++) {
96
+ chainParts.push(_chalk().default.cyan(names[i]));
97
+ plainParts.push(names[i]);
98
+ if (i < names.length - 1) {
99
+ chainParts.push(_chalk().default.dim(ARROW));
100
+ plainParts.push(ARROW);
101
+ }
102
+ }
103
+ const chainStr = chainParts.join('');
104
+ const plainLen = plainParts.join('').length;
105
+
106
+ // the last segment connects to the closing edge: ───┘
107
+ const closingSuffix = _chalk().default.red(' ───┘');
108
+ const closingSuffixLen = 6; // " ───┘"
109
+
110
+ const totalWidth = plainLen + closingSuffixLen;
111
+
112
+ // top bar spans from above ▼ (column 0) to the ┐ (at totalWidth - 1)
113
+ const topBar = _chalk().default.red('┌') + _chalk().default.red('─'.repeat(totalWidth - 2)) + _chalk().default.red('┐');
114
+ const sideLine = ' '.repeat(totalWidth - 1) + _chalk().default.red('│');
115
+ const entryArrow = _chalk().default.red('▼') + ' '.repeat(totalWidth - 2) + _chalk().default.red('│');
116
+ const lines = [topBar, sideLine, entryArrow, chainStr + closingSuffix];
117
+ return lines.join('\n');
118
+ }
119
+ function renderVertical(names) {
120
+ const lines = [];
121
+ for (let i = 0; i < names.length; i++) {
122
+ lines.push(_chalk().default.cyan(names[i]));
123
+ if (i < names.length - 1) {
124
+ lines.push(_chalk().default.dim(' │'));
125
+ lines.push(_chalk().default.dim(' ▼'));
126
+ }
127
+ }
128
+ // back-edge to start
129
+ lines.push(_chalk().default.red(` ╰───▶ `) + _chalk().default.cyan(names[0]) + _chalk().default.dim(' (back to start)'));
130
+ return lines.join('\n');
131
+ }
24
132
  const INSIGHT_CIRCULAR_DEPS_NAME = exports.INSIGHT_CIRCULAR_DEPS_NAME = 'circular';
25
133
  class FindCycles {
26
134
  constructor(graphBuilder) {
@@ -52,15 +160,35 @@ class FindCycles {
52
160
  };
53
161
  }
54
162
  renderData(data) {
55
- if (data.data.length === 0) {
163
+ if (!data.data || data.data.length === 0) {
56
164
  return 'No cyclic dependencies';
57
165
  }
58
- const string = data.data.map(cycle => {
59
- return `\nCyclic dependency (${cycle.length - 1} components)
60
- ---------------------------------
61
- - ${cycle.join('\n- ')}`;
62
- }).join('\n');
63
- return string;
166
+ const totalCycles = data.data.length;
167
+ const blocks = data.data.map((cycle, idx) => {
168
+ const componentCount = cycle.length - 1; // last entry is duplicate of first
169
+ const {
170
+ names,
171
+ scope,
172
+ version
173
+ } = shortenNames(cycle);
174
+ const cycleIndex = totalCycles > 1 ? idx : undefined;
175
+ const header = renderHeader(cycleIndex, totalCycles, componentCount, scope, version);
176
+ let body;
177
+ if (componentCount === 1) {
178
+ body = renderSelfCycle(names[0]);
179
+ } else {
180
+ // measure horizontal width
181
+ const chainPlainLen = names.reduce((sum, n) => sum + n.length, 0) + (names.length - 1) * ARROW_LEN;
182
+ const horizontalWidth = chainPlainLen + 6; // + closing " ───┘"
183
+ if (horizontalWidth <= MAX_HORIZONTAL_WIDTH) {
184
+ body = renderHorizontal(names);
185
+ } else {
186
+ body = renderVertical(names);
187
+ }
188
+ }
189
+ return `${header}\n\n${body}`;
190
+ });
191
+ return '\n' + blocks.join('\n\n') + '\n';
64
192
  }
65
193
  async run(opts) {
66
194
  const bareResult = await this.runInsight(opts);
@@ -83,7 +211,7 @@ class FindCycles {
83
211
  const result = await this.runInsight({
84
212
  ids: components.map(c => c.id)
85
213
  });
86
- if (!result.data.length) {
214
+ if (!result.data || !result.data.length) {
87
215
  return; // no circulars
88
216
  }
89
217
  const allIds = (0, _lodash().uniq)(result.data.flat());
@@ -1 +1 @@
1
- {"version":3,"names":["_componentIssues","data","require","_lodash","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","INSIGHT_CIRCULAR_DEPS_NAME","exports","FindCycles","constructor","graphBuilder","runInsight","opts","graph","getGraphIds","ids","message","undefined","cycles","findCycles","includeDeps","forEach","cycle","push","length","renderData","string","map","join","run","bareResult","renderedData","result","metaData","name","description","addAsComponentIssue","components","c","id","allIds","uniq","flat","componentsWithCircular","filter","component","includes","toString","state","issues","getOrCreate","IssuesClasses","CircularDependencies","default"],"sources":["find-circulars.ts"],"sourcesContent":["import type { Component } from '@teambit/component';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport type { GraphMain } from '@teambit/graph';\nimport { uniq } from 'lodash';\nimport type { Insight, InsightResult, RawResult } from '../insight';\nimport type { RunInsightOptions } from '../insight-manager';\n\nexport const INSIGHT_CIRCULAR_DEPS_NAME = 'circular';\n\nexport default class FindCycles implements Insight {\n name = INSIGHT_CIRCULAR_DEPS_NAME;\n description = 'Get all circular dependencies in component graph';\n graphBuilder: GraphMain;\n constructor(graphBuilder: GraphMain) {\n this.graphBuilder = graphBuilder;\n }\n private async runInsight(opts?: RunInsightOptions): Promise<RawResult> {\n const graph = await this.graphBuilder.getGraphIds(opts?.ids);\n if (!graph) {\n return {\n message: '',\n data: undefined,\n };\n }\n const cycles = graph.findCycles(undefined, opts?.includeDeps);\n // add the first component to the end to make the circular visible in the output\n cycles.forEach((cycle) => cycle.push(cycle[0]));\n if (cycles.length === 1) {\n return {\n message: `Found ${cycles.length} cycle.`,\n data: cycles,\n };\n }\n return {\n message: `Found ${cycles.length} cycles.`,\n data: cycles,\n };\n }\n\n private renderData(data: RawResult) {\n if (data.data.length === 0) {\n return 'No cyclic dependencies';\n }\n const string = data.data\n .map((cycle) => {\n return `\\nCyclic dependency (${cycle.length - 1} components)\n---------------------------------\n- ${cycle.join('\\n- ')}`;\n })\n .join('\\n');\n return string;\n }\n\n async run(opts?: RunInsightOptions): Promise<InsightResult> {\n const bareResult = await this.runInsight(opts);\n const renderedData = this.renderData(bareResult);\n const result: InsightResult = {\n metaData: {\n name: this.name,\n description: this.description,\n },\n data: bareResult.data,\n message: bareResult.message,\n renderedData,\n };\n\n if (bareResult.message) {\n result.message = bareResult.message;\n }\n return result;\n }\n\n async addAsComponentIssue(components: Component[]) {\n const result = await this.runInsight({ ids: components.map((c) => c.id) });\n if (!result.data.length) {\n return; // no circulars\n }\n const allIds = uniq(result.data.flat());\n const componentsWithCircular = components.filter((component) => allIds.includes(component.id.toString()));\n componentsWithCircular.forEach((component) => {\n component.state.issues.getOrCreate(IssuesClasses.CircularDependencies).data = true;\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_componentIssues","data","require","_chalk","_interopRequireDefault","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","MAX_HORIZONTAL_WIDTH","ARROW","ARROW_LEN","shortenNames","cycle","unique","slice","parsed","map","id","atIdx","lastIndexOf","version","undefined","withoutVer","slashIdx","scope","name","scopes","Set","p","commonScope","size","versions","commonVersion","names","display","renderHeader","cycleIndex","totalCycles","componentCount","isSelf","header","chalk","bold","renderSelfCycle","cyan","renderHorizontal","chainParts","plainParts","length","push","dim","chainStr","join","plainLen","closingSuffix","red","closingSuffixLen","totalWidth","topBar","repeat","sideLine","entryArrow","lines","renderVertical","INSIGHT_CIRCULAR_DEPS_NAME","exports","FindCycles","constructor","graphBuilder","runInsight","opts","graph","getGraphIds","ids","message","cycles","findCycles","includeDeps","forEach","renderData","blocks","idx","body","chainPlainLen","reduce","sum","n","horizontalWidth","run","bareResult","renderedData","result","metaData","description","addAsComponentIssue","components","c","allIds","uniq","flat","componentsWithCircular","filter","component","includes","toString","state","issues","getOrCreate","IssuesClasses","CircularDependencies"],"sources":["find-circulars.ts"],"sourcesContent":["import type { Component } from '@teambit/component';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport type { GraphMain } from '@teambit/graph';\nimport chalk from 'chalk';\nimport { uniq } from 'lodash';\nimport type { Insight, InsightResult, RawResult } from '../insight';\nimport type { RunInsightOptions } from '../insight-manager';\n\nconst MAX_HORIZONTAL_WIDTH = 90;\nconst ARROW = ' ───> ';\nconst ARROW_LEN = 8;\n\ntype ShortenedInfo = {\n names: string[];\n scope: string | undefined;\n version: string | undefined;\n};\n\nfunction shortenNames(cycle: string[]): ShortenedInfo {\n // cycle has the first element duplicated at the end; work with unique entries\n const unique = cycle.slice(0, -1);\n\n // extract scope: everything up to and including the last '/' before the component name\n // e.g. \"my-org.scope/ui/button@0.0.1\" → scope \"my-org.scope/ui\", name \"button\", ver \"0.0.1\"\n const parsed = unique.map((id) => {\n const atIdx = id.lastIndexOf('@');\n const version = atIdx > 0 ? id.slice(atIdx + 1) : undefined;\n const withoutVer = atIdx > 0 ? id.slice(0, atIdx) : id;\n const slashIdx = withoutVer.lastIndexOf('/');\n const scope = slashIdx > 0 ? withoutVer.slice(0, slashIdx) : undefined;\n const name = slashIdx > 0 ? withoutVer.slice(slashIdx + 1) : withoutVer;\n return { scope, name, version };\n });\n\n // common scope: only if ALL entries share the same scope\n const scopes = new Set(parsed.map((p) => p.scope));\n const commonScope = scopes.size === 1 ? parsed[0].scope : undefined;\n\n // common version: only if ALL entries share the same version\n const versions = new Set(parsed.map((p) => p.version));\n const commonVersion = versions.size === 1 ? parsed[0].version : undefined;\n\n const names = parsed.map((p) => {\n let display = commonScope ? p.name : p.scope ? `${p.scope}/${p.name}` : p.name;\n if (!commonVersion && p.version) {\n display += `@${p.version}`;\n }\n return display;\n });\n\n return { names, scope: commonScope, version: commonVersion };\n}\n\nfunction renderHeader(\n cycleIndex: number | undefined,\n totalCycles: number,\n componentCount: number,\n scope: string | undefined,\n version: string | undefined\n): string {\n const isSelf = componentCount === 1;\n let header = '';\n\n if (totalCycles > 1 && cycleIndex !== undefined) {\n header += `Cycle ${cycleIndex + 1} of ${totalCycles}`;\n } else {\n header += 'Cycle';\n }\n\n header += isSelf ? ' - self-dependency' : ` - ${componentCount} components`;\n\n if (scope) header += ` (scope: ${scope})`;\n if (version) header += ` @${version}`;\n\n return chalk.bold(header);\n}\n\nfunction renderSelfCycle(name: string): string {\n return ` ${chalk.cyan(name)} ⟲`;\n}\n\nfunction renderHorizontal(names: string[]): string {\n // build chain: name0 ───> name1 ───> name2\n const chainParts: string[] = [];\n const plainParts: string[] = [];\n for (let i = 0; i < names.length; i++) {\n chainParts.push(chalk.cyan(names[i]));\n plainParts.push(names[i]);\n if (i < names.length - 1) {\n chainParts.push(chalk.dim(ARROW));\n plainParts.push(ARROW);\n }\n }\n\n const chainStr = chainParts.join('');\n const plainLen = plainParts.join('').length;\n\n // the last segment connects to the closing edge: ───┘\n const closingSuffix = chalk.red(' ───┘');\n const closingSuffixLen = 6; // \" ───┘\"\n\n const totalWidth = plainLen + closingSuffixLen;\n\n // top bar spans from above ▼ (column 0) to the ┐ (at totalWidth - 1)\n const topBar = chalk.red('┌') + chalk.red('─'.repeat(totalWidth - 2)) + chalk.red('┐');\n const sideLine = ' '.repeat(totalWidth - 1) + chalk.red('│');\n const entryArrow = chalk.red('▼') + ' '.repeat(totalWidth - 2) + chalk.red('│');\n\n const lines = [topBar, sideLine, entryArrow, chainStr + closingSuffix];\n return lines.join('\\n');\n}\n\nfunction renderVertical(names: string[]): string {\n const lines: string[] = [];\n for (let i = 0; i < names.length; i++) {\n lines.push(chalk.cyan(names[i]));\n if (i < names.length - 1) {\n lines.push(chalk.dim(' │'));\n lines.push(chalk.dim(' ▼'));\n }\n }\n // back-edge to start\n lines.push(chalk.red(` ╰───▶ `) + chalk.cyan(names[0]) + chalk.dim(' (back to start)'));\n return lines.join('\\n');\n}\n\nexport const INSIGHT_CIRCULAR_DEPS_NAME = 'circular';\n\nexport default class FindCycles implements Insight {\n name = INSIGHT_CIRCULAR_DEPS_NAME;\n description = 'Get all circular dependencies in component graph';\n graphBuilder: GraphMain;\n constructor(graphBuilder: GraphMain) {\n this.graphBuilder = graphBuilder;\n }\n private async runInsight(opts?: RunInsightOptions): Promise<RawResult> {\n const graph = await this.graphBuilder.getGraphIds(opts?.ids);\n if (!graph) {\n return {\n message: '',\n data: undefined,\n };\n }\n const cycles = graph.findCycles(undefined, opts?.includeDeps);\n // add the first component to the end to make the circular visible in the output\n cycles.forEach((cycle) => cycle.push(cycle[0]));\n if (cycles.length === 1) {\n return {\n message: `Found ${cycles.length} cycle.`,\n data: cycles,\n };\n }\n return {\n message: `Found ${cycles.length} cycles.`,\n data: cycles,\n };\n }\n\n private renderData(data: RawResult) {\n if (!data.data || data.data.length === 0) {\n return 'No cyclic dependencies';\n }\n const totalCycles = data.data.length;\n const blocks = data.data.map((cycle: string[], idx: number) => {\n const componentCount = cycle.length - 1; // last entry is duplicate of first\n const { names, scope, version } = shortenNames(cycle);\n const cycleIndex = totalCycles > 1 ? idx : undefined;\n const header = renderHeader(cycleIndex, totalCycles, componentCount, scope, version);\n\n let body: string;\n if (componentCount === 1) {\n body = renderSelfCycle(names[0]);\n } else {\n // measure horizontal width\n const chainPlainLen = names.reduce((sum, n) => sum + n.length, 0) + (names.length - 1) * ARROW_LEN;\n const horizontalWidth = chainPlainLen + 6; // + closing \" ───┘\"\n if (horizontalWidth <= MAX_HORIZONTAL_WIDTH) {\n body = renderHorizontal(names);\n } else {\n body = renderVertical(names);\n }\n }\n\n return `${header}\\n\\n${body}`;\n });\n\n return '\\n' + blocks.join('\\n\\n') + '\\n';\n }\n\n async run(opts?: RunInsightOptions): Promise<InsightResult> {\n const bareResult = await this.runInsight(opts);\n const renderedData = this.renderData(bareResult);\n const result: InsightResult = {\n metaData: {\n name: this.name,\n description: this.description,\n },\n data: bareResult.data,\n message: bareResult.message,\n renderedData,\n };\n\n if (bareResult.message) {\n result.message = bareResult.message;\n }\n return result;\n }\n\n async addAsComponentIssue(components: Component[]) {\n const result = await this.runInsight({ ids: components.map((c) => c.id) });\n if (!result.data || !result.data.length) {\n return; // no circulars\n }\n const allIds = uniq(result.data.flat());\n const componentsWithCircular = components.filter((component) => allIds.includes(component.id.toString()));\n componentsWithCircular.forEach((component) => {\n component.state.issues.getOrCreate(IssuesClasses.CircularDependencies).data = true;\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  ;
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.explorer_insights@1.0.919/dist/insights.docs.mdx';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.explorer_insights@1.0.921/dist/insights.docs.mdx';
3
3
 
4
4
  export const compositions = [];
5
5
  export const overview = [overview_0];
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/insights",
3
- "version": "1.0.919",
3
+ "version": "1.0.921",
4
4
  "homepage": "https://bit.cloud/teambit/explorer/insights",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.explorer",
8
8
  "name": "insights",
9
- "version": "1.0.919"
9
+ "version": "1.0.921"
10
10
  },
11
11
  "dependencies": {
12
12
  "p-map-series": "2.1.0",
@@ -18,9 +18,9 @@
18
18
  "@teambit/cli": "0.0.1304",
19
19
  "@teambit/component-issues": "0.0.170",
20
20
  "@teambit/bit-error": "0.0.404",
21
- "@teambit/graph": "1.0.919",
22
- "@teambit/component": "1.0.919",
23
- "@teambit/issues": "1.0.919"
21
+ "@teambit/graph": "1.0.920",
22
+ "@teambit/component": "1.0.920",
23
+ "@teambit/issues": "1.0.920"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/semver": "7.5.8",