monorepo-next 9.2.1 → 9.2.3
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 +1 -1
- package/src/cycle.js +36 -69
package/package.json
CHANGED
package/src/cycle.js
CHANGED
@@ -2,94 +2,54 @@
|
|
2
2
|
|
3
3
|
const dependencyTypes = require('./dependency-types');
|
4
4
|
|
5
|
-
function createPackageNode({
|
6
|
-
packageName,
|
7
|
-
dependencyType,
|
8
|
-
dependencyRange,
|
9
|
-
parent,
|
10
|
-
branch,
|
11
|
-
}) {
|
12
|
-
let group = {
|
13
|
-
parent,
|
14
|
-
dependencyType,
|
15
|
-
dependencyRange,
|
16
|
-
isCycle: false,
|
17
|
-
packageName,
|
18
|
-
};
|
19
|
-
|
20
|
-
let newBranch = [...branch, group].filter(Boolean);
|
21
|
-
|
22
|
-
return {
|
23
|
-
newGroup: group,
|
24
|
-
newBranch,
|
25
|
-
};
|
26
|
-
}
|
27
|
-
|
28
|
-
function findGroupInBranchByPackageName(branch, packageName) {
|
29
|
-
let _i = -1;
|
30
|
-
|
31
|
-
for (let i = 0; i < branch.length; i++) {
|
32
|
-
if (branch[i].packageName === packageName) {
|
33
|
-
_i = i;
|
34
|
-
|
35
|
-
break;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
|
39
|
-
return _i;
|
40
|
-
}
|
41
|
-
|
42
5
|
function _getCycles({
|
43
6
|
packages,
|
44
7
|
_package,
|
45
8
|
dependencyType,
|
46
9
|
dependencyRange,
|
47
|
-
parent,
|
48
10
|
branch,
|
49
11
|
visitedNodes,
|
50
12
|
cycles,
|
51
13
|
shouldDetectDevDependencies,
|
52
14
|
}) {
|
53
|
-
let
|
15
|
+
let { packageName } = _package;
|
16
|
+
let cycleTips = new Set();
|
54
17
|
|
55
|
-
|
56
|
-
let i = findGroupInBranchByPackageName(branch, _package.packageName);
|
18
|
+
let hasVisitedNode = visitedNodes.has(packageName);
|
57
19
|
|
58
|
-
|
20
|
+
if (hasVisitedNode) {
|
21
|
+
return cycleTips;
|
22
|
+
}
|
23
|
+
|
24
|
+
let isCycle = branch.has(packageName);
|
59
25
|
|
26
|
+
if (isCycle) {
|
60
27
|
let existingGroup = {
|
61
|
-
parent,
|
62
28
|
dependencyType,
|
63
29
|
dependencyRange,
|
64
|
-
|
65
|
-
packageName: visitedNode,
|
30
|
+
packageName,
|
66
31
|
};
|
67
32
|
|
68
|
-
|
69
|
-
let newBranch = [...branch.slice(i), existingGroup];
|
33
|
+
let newBranch = [...[...branch.values()].slice([...branch.keys()].indexOf(packageName)), existingGroup];
|
70
34
|
|
71
|
-
|
72
|
-
|
73
|
-
|
35
|
+
let cycle = newBranch.map(({ dependencyType, packageName }) => {
|
36
|
+
return [dependencyType, packageName];
|
37
|
+
});
|
74
38
|
|
75
|
-
|
76
|
-
}
|
39
|
+
cycles.add(cycle.flat().slice(1).join(' < '));
|
77
40
|
|
78
|
-
|
41
|
+
cycleTips.add(packageName);
|
42
|
+
|
43
|
+
return cycleTips;
|
79
44
|
}
|
80
45
|
|
81
|
-
let {
|
82
|
-
newGroup,
|
83
|
-
newBranch,
|
84
|
-
} = createPackageNode({
|
85
|
-
packageName: _package.packageName,
|
46
|
+
let newGroup = {
|
86
47
|
dependencyType,
|
87
48
|
dependencyRange,
|
88
|
-
|
89
|
-
|
90
|
-
});
|
49
|
+
packageName,
|
50
|
+
};
|
91
51
|
|
92
|
-
|
52
|
+
let newBranch = new Map([...branch, [packageName, newGroup]]);
|
93
53
|
|
94
54
|
for (let dependencyType of dependencyTypes) {
|
95
55
|
if (!shouldDetectDevDependencies && dependencyType === 'devDependencies') {
|
@@ -102,26 +62,33 @@ function _getCycles({
|
|
102
62
|
let dependencyRange = dependencies[packageName];
|
103
63
|
let _package = packages[packageName];
|
104
64
|
|
105
|
-
_getCycles({
|
65
|
+
cycleTips = new Set([...cycleTips, ..._getCycles({
|
106
66
|
packages,
|
107
67
|
_package,
|
108
68
|
dependencyType,
|
109
69
|
dependencyRange,
|
110
|
-
parent: newGroup,
|
111
70
|
branch: newBranch,
|
112
71
|
visitedNodes,
|
113
72
|
cycles,
|
114
73
|
shouldDetectDevDependencies,
|
115
|
-
});
|
74
|
+
})]);
|
116
75
|
}
|
117
76
|
}
|
77
|
+
|
78
|
+
cycleTips.delete(packageName);
|
79
|
+
|
80
|
+
if (!cycleTips.size) {
|
81
|
+
visitedNodes.add(packageName);
|
82
|
+
}
|
83
|
+
|
84
|
+
return cycleTips;
|
118
85
|
}
|
119
86
|
|
120
87
|
function getCycles(workspaceMeta, {
|
121
88
|
shouldDetectDevDependencies,
|
122
89
|
} = {}) {
|
123
|
-
let cycles =
|
124
|
-
let visitedNodes =
|
90
|
+
let cycles = new Set();
|
91
|
+
let visitedNodes = new Set();
|
125
92
|
let { packages } = workspaceMeta;
|
126
93
|
|
127
94
|
for (let packageName of Object.keys(packages).sort()) {
|
@@ -130,14 +97,14 @@ function getCycles(workspaceMeta, {
|
|
130
97
|
_getCycles({
|
131
98
|
packages,
|
132
99
|
_package,
|
133
|
-
branch:
|
100
|
+
branch: new Map(),
|
134
101
|
visitedNodes,
|
135
102
|
cycles,
|
136
103
|
shouldDetectDevDependencies,
|
137
104
|
});
|
138
105
|
}
|
139
106
|
|
140
|
-
return
|
107
|
+
return [...cycles].sort();
|
141
108
|
}
|
142
109
|
|
143
110
|
Object.assign(module.exports, {
|