monorepo-next 9.2.0 → 9.2.2

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 +4 -4
  2. package/src/cycle.js +29 -68
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-next",
3
- "version": "9.2.0",
3
+ "version": "9.2.2",
4
4
  "description": "Detach monorepo packages from normal linking",
5
5
  "bin": {
6
6
  "next": "bin/next.js"
@@ -80,8 +80,8 @@
80
80
  "chai-as-promised": "^7.1.1",
81
81
  "common-tags": "^1.8.2",
82
82
  "eslint": "^8.0.0",
83
- "eslint-config-crowdstrike": "^9.0.0",
84
- "eslint-config-crowdstrike-node": "^3.0.0",
83
+ "eslint-config-crowdstrike": "10.1.0",
84
+ "eslint-config-crowdstrike-node": "3.0.1",
85
85
  "eslint-plugin-json-files": "^2.0.0",
86
86
  "eslint-plugin-mocha": "^10.0.0",
87
87
  "eslint-plugin-node": "^11.0.0",
@@ -95,6 +95,6 @@
95
95
  "sinon": "^15.0.0",
96
96
  "sinon-chai": "^3.5.0",
97
97
  "standard-node-template": "3.2.1",
98
- "yargs-help-output": "^2.0.0"
98
+ "yargs-help-output": "^3.0.0"
99
99
  }
100
100
  }
package/src/cycle.js CHANGED
@@ -2,101 +2,61 @@
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];
54
-
55
- if (visitedNode) {
56
- let i = findGroupInBranchByPackageName(branch, _package.packageName);
15
+ let { packageName } = _package;
57
16
 
58
- let isCycle = i !== -1;
17
+ let hasVisitedNode = visitedNodes.has(packageName);
59
18
 
60
- let existingGroup = {
61
- parent,
62
- dependencyType,
63
- dependencyRange,
64
- isCycle,
65
- packageName: visitedNode,
66
- };
19
+ if (hasVisitedNode) {
20
+ let isCycle = branch.has(packageName);
67
21
 
68
22
  if (isCycle) {
69
- let newBranch = [...branch.slice(i), existingGroup];
23
+ let existingGroup = {
24
+ dependencyType,
25
+ dependencyRange,
26
+ packageName,
27
+ };
28
+
29
+ let newBranch = [...[...branch.values()].slice([...branch.keys()].indexOf(packageName)), existingGroup];
70
30
 
71
31
  let cycle = newBranch.map(({ dependencyType, packageName }) => {
72
32
  return [dependencyType, packageName];
73
33
  });
74
34
 
75
- cycles[cycle.flat().slice(1).join(' < ')] = existingGroup;
35
+ cycles.add(cycle.flat().slice(1).join(' < '));
76
36
  }
77
37
 
78
38
  return;
79
39
  }
80
40
 
81
- let {
82
- newGroup,
83
- newBranch,
84
- } = createPackageNode({
85
- packageName: _package.packageName,
41
+ let newGroup = {
86
42
  dependencyType,
87
43
  dependencyRange,
88
- parent,
89
- branch,
90
- });
44
+ packageName,
45
+ };
91
46
 
92
- visitedNodes[_package.packageName] = newGroup.packageName;
47
+ let newBranch = new Map([...branch, [packageName, newGroup]]);
48
+
49
+ visitedNodes.add(packageName);
93
50
 
94
51
  for (let dependencyType of dependencyTypes) {
95
52
  if (!shouldDetectDevDependencies && dependencyType === 'devDependencies') {
96
53
  continue;
97
54
  }
98
55
 
99
- for (let [packageName, dependencyRange] of Object.entries(_package[dependencyType])) {
56
+ let dependencies = _package[dependencyType];
57
+
58
+ for (let packageName of Object.keys(dependencies).sort()) {
59
+ let dependencyRange = dependencies[packageName];
100
60
  let _package = packages[packageName];
101
61
 
102
62
  _getCycles({
@@ -104,7 +64,6 @@ function _getCycles({
104
64
  _package,
105
65
  dependencyType,
106
66
  dependencyRange,
107
- parent: newGroup,
108
67
  branch: newBranch,
109
68
  visitedNodes,
110
69
  cycles,
@@ -117,22 +76,24 @@ function _getCycles({
117
76
  function getCycles(workspaceMeta, {
118
77
  shouldDetectDevDependencies,
119
78
  } = {}) {
120
- let cycles = {};
121
- let visitedNodes = {};
79
+ let cycles = new Set();
80
+ let visitedNodes = new Set();
122
81
  let { packages } = workspaceMeta;
123
82
 
124
- for (let _package of Object.values(packages)) {
83
+ for (let packageName of Object.keys(packages).sort()) {
84
+ let _package = packages[packageName];
85
+
125
86
  _getCycles({
126
87
  packages,
127
88
  _package,
128
- branch: [],
89
+ branch: new Map(),
129
90
  visitedNodes,
130
91
  cycles,
131
92
  shouldDetectDevDependencies,
132
93
  });
133
94
  }
134
95
 
135
- return Object.keys(cycles);
96
+ return [...cycles].sort();
136
97
  }
137
98
 
138
99
  Object.assign(module.exports, {