@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
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
22
|
-
"@teambit/component": "1.0.
|
|
23
|
-
"@teambit/issues": "1.0.
|
|
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",
|