monorepo-next 9.2.2 → 9.2.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/cycle.js +51 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-next",
3
- "version": "9.2.2",
3
+ "version": "9.2.4",
4
4
  "description": "Detach monorepo packages from normal linking",
5
5
  "bin": {
6
6
  "next": "bin/next.js"
package/src/cycle.js CHANGED
@@ -2,6 +2,28 @@
2
2
 
3
3
  const dependencyTypes = require('./dependency-types');
4
4
 
5
+ function sortCycle(cycle) {
6
+ let alpha = cycle[0];
7
+ let index = 0;
8
+
9
+ for (let i = 2; i < cycle.length - 2; i += 2) {
10
+ let name = cycle[i];
11
+
12
+ if (name < alpha) {
13
+ alpha = name;
14
+ index = i;
15
+ }
16
+ }
17
+
18
+ let shifts = index / 2;
19
+
20
+ for (let i = 0; i < shifts; i++) {
21
+ cycle = [...cycle.slice(2), cycle[1], cycle[2]];
22
+ }
23
+
24
+ return cycle;
25
+ }
26
+
5
27
  function _getCycles({
6
28
  packages,
7
29
  _package,
@@ -13,29 +35,34 @@ function _getCycles({
13
35
  shouldDetectDevDependencies,
14
36
  }) {
15
37
  let { packageName } = _package;
38
+ let cycleTips = new Set();
16
39
 
17
40
  let hasVisitedNode = visitedNodes.has(packageName);
18
41
 
19
42
  if (hasVisitedNode) {
20
- let isCycle = branch.has(packageName);
43
+ return cycleTips;
44
+ }
21
45
 
22
- if (isCycle) {
23
- let existingGroup = {
24
- dependencyType,
25
- dependencyRange,
26
- packageName,
27
- };
46
+ let isCycle = branch.has(packageName);
28
47
 
29
- let newBranch = [...[...branch.values()].slice([...branch.keys()].indexOf(packageName)), existingGroup];
48
+ if (isCycle) {
49
+ let existingGroup = {
50
+ dependencyType,
51
+ dependencyRange,
52
+ packageName,
53
+ };
30
54
 
31
- let cycle = newBranch.map(({ dependencyType, packageName }) => {
32
- return [dependencyType, packageName];
33
- });
55
+ let newBranch = [...[...branch.values()].slice([...branch.keys()].indexOf(packageName)), existingGroup];
34
56
 
35
- cycles.add(cycle.flat().slice(1).join(' < '));
36
- }
57
+ let cycle = newBranch.map(({ dependencyType, packageName }) => {
58
+ return [dependencyType, packageName];
59
+ });
60
+
61
+ cycles.add(sortCycle(cycle.flat().slice(1)).join(' < '));
62
+
63
+ cycleTips.add(packageName);
37
64
 
38
- return;
65
+ return cycleTips;
39
66
  }
40
67
 
41
68
  let newGroup = {
@@ -46,8 +73,6 @@ function _getCycles({
46
73
 
47
74
  let newBranch = new Map([...branch, [packageName, newGroup]]);
48
75
 
49
- visitedNodes.add(packageName);
50
-
51
76
  for (let dependencyType of dependencyTypes) {
52
77
  if (!shouldDetectDevDependencies && dependencyType === 'devDependencies') {
53
78
  continue;
@@ -59,7 +84,7 @@ function _getCycles({
59
84
  let dependencyRange = dependencies[packageName];
60
85
  let _package = packages[packageName];
61
86
 
62
- _getCycles({
87
+ cycleTips = new Set([...cycleTips, ..._getCycles({
63
88
  packages,
64
89
  _package,
65
90
  dependencyType,
@@ -68,9 +93,17 @@ function _getCycles({
68
93
  visitedNodes,
69
94
  cycles,
70
95
  shouldDetectDevDependencies,
71
- });
96
+ })]);
72
97
  }
73
98
  }
99
+
100
+ cycleTips.delete(packageName);
101
+
102
+ if (!cycleTips.size) {
103
+ visitedNodes.add(packageName);
104
+ }
105
+
106
+ return cycleTips;
74
107
  }
75
108
 
76
109
  function getCycles(workspaceMeta, {