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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/cycle.js +36 -69
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-next",
3
- "version": "9.2.1",
3
+ "version": "9.2.3",
4
4
  "description": "Detach monorepo packages from normal linking",
5
5
  "bin": {
6
6
  "next": "bin/next.js"
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 visitedNode = visitedNodes[_package.packageName];
15
+ let { packageName } = _package;
16
+ let cycleTips = new Set();
54
17
 
55
- if (visitedNode) {
56
- let i = findGroupInBranchByPackageName(branch, _package.packageName);
18
+ let hasVisitedNode = visitedNodes.has(packageName);
57
19
 
58
- let isCycle = i !== -1;
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
- isCycle,
65
- packageName: visitedNode,
30
+ packageName,
66
31
  };
67
32
 
68
- if (isCycle) {
69
- let newBranch = [...branch.slice(i), existingGroup];
33
+ let newBranch = [...[...branch.values()].slice([...branch.keys()].indexOf(packageName)), existingGroup];
70
34
 
71
- let cycle = newBranch.map(({ dependencyType, packageName }) => {
72
- return [dependencyType, packageName];
73
- });
35
+ let cycle = newBranch.map(({ dependencyType, packageName }) => {
36
+ return [dependencyType, packageName];
37
+ });
74
38
 
75
- cycles[cycle.flat().slice(1).join(' < ')] = existingGroup;
76
- }
39
+ cycles.add(cycle.flat().slice(1).join(' < '));
77
40
 
78
- return;
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
- parent,
89
- branch,
90
- });
49
+ packageName,
50
+ };
91
51
 
92
- visitedNodes[_package.packageName] = newGroup.packageName;
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 Object.keys(cycles).sort();
107
+ return [...cycles].sort();
141
108
  }
142
109
 
143
110
  Object.assign(module.exports, {