monorepo-next 8.0.2 → 8.1.0

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-next",
3
- "version": "8.0.2",
3
+ "version": "8.1.0",
4
4
  "description": "Detach monorepo packages from normal linking",
5
5
  "bin": {
6
6
  "next": "bin/next.js"
@@ -45,11 +45,11 @@ function isReleaseTypeInRange(version, type, range) {
45
45
  return semver.satisfies(semver.inc(version, type), range);
46
46
  }
47
47
 
48
+ let shouldVersionBumpSymbol = Symbol('shouldVersionBump');
49
+
48
50
  async function init({
49
51
  dag,
50
52
  releaseTrees,
51
- releaseType,
52
- shouldVersionBump = true,
53
53
  }) {
54
54
  let {
55
55
  isPackage,
@@ -69,23 +69,30 @@ async function init({
69
69
  }
70
70
  }
71
71
 
72
- if (!releaseType) {
73
- releaseType = await module.exports.getReleaseType(name, cwd);
74
- }
75
-
76
72
  let canBumpVersion = !!(version && name);
77
73
  let canPublish = isPackage;
78
- let shouldBumpVersion = canBumpVersion && shouldVersionBump;
79
- let shouldPublish = canPublish && shouldBumpVersion;
80
74
 
81
- return releaseTrees[name] = {
75
+ let shouldVersionBump = false;
76
+
77
+ let releaseTree = {
82
78
  oldVersion: version,
83
- releaseType,
79
+ releaseType: defaultReleaseType,
84
80
  cwd,
85
81
  name,
86
- shouldBumpVersion,
87
- shouldPublish,
82
+ [shouldVersionBumpSymbol]() {
83
+ shouldVersionBump = true;
84
+ },
85
+ get shouldBumpVersion() {
86
+ return canBumpVersion && shouldVersionBump;
87
+ },
88
+ get shouldPublish() {
89
+ return canPublish && this.shouldBumpVersion;
90
+ },
88
91
  };
92
+
93
+ releaseTrees[name] = releaseTree;
94
+
95
+ return releaseTree;
89
96
  }
90
97
 
91
98
  async function firstPass({
@@ -97,7 +104,14 @@ async function firstPass({
97
104
  continue;
98
105
  }
99
106
 
100
- await init({ dag, releaseTrees });
107
+ let {
108
+ packageName: name,
109
+ cwd,
110
+ } = dag.node;
111
+
112
+ let releaseTree = await init({ dag, releaseTrees });
113
+
114
+ releaseTree.releaseType = await module.exports.getReleaseType(name, cwd);
101
115
  }
102
116
  }
103
117
 
@@ -108,6 +122,8 @@ async function secondPass({
108
122
  shouldInheritGreaterReleaseType,
109
123
  shouldExcludeDevChanges,
110
124
  }) {
125
+ let visitedNodes = new Set();
126
+
111
127
  for (let { dag, changedReleasableFiles } of packagesWithChanges) {
112
128
  if (!changedReleasableFiles.length) {
113
129
  continue;
@@ -117,21 +133,28 @@ async function secondPass({
117
133
  dag,
118
134
  parent,
119
135
  }) {
136
+ if (visitedNodes.has(dag.node.packageName)) {
137
+ return;
138
+ }
139
+
140
+ visitedNodes.add(dag.node.packageName);
141
+
120
142
  let doesPackageHaveChanges = !!releaseTrees[dag.node.packageName];
121
143
  if (!doesPackageHaveChanges) {
122
144
  let isDevDep = dag.dependencyType === 'devDependencies';
123
- let shouldVersionBump = !shouldExcludeDevChanges || !isDevDep;
124
145
 
125
146
  if (dag.node.isPackage && shouldInheritGreaterReleaseType && !isDevDep && shouldBumpInRangeDependencies) {
126
- await init({ dag, releaseTrees, releaseType: parent.releaseType });
147
+ await init({ dag, releaseTrees });
127
148
  } else if (!isReleaseTypeInRange(parent.oldVersion, parent.releaseType, dag.dependencyRange)) {
128
- await init({ dag, releaseTrees, releaseType: defaultReleaseType, shouldVersionBump });
149
+ await init({ dag, releaseTrees });
129
150
  } else if (shouldBumpInRangeDependencies) {
130
- await init({ dag, releaseTrees, releaseType: defaultReleaseType, shouldVersionBump });
151
+ await init({ dag, releaseTrees });
131
152
  } else {
132
153
  return;
133
154
  }
134
155
 
156
+ let shouldVersionBump = !(shouldExcludeDevChanges && isDevDep);
157
+
135
158
  if (!shouldVersionBump) {
136
159
  return;
137
160
  }
@@ -157,7 +180,10 @@ function thirdPass({
157
180
  releaseTrees,
158
181
  packagesWithChanges,
159
182
  shouldInheritGreaterReleaseType,
183
+ shouldExcludeDevChanges,
160
184
  }) {
185
+ let visitedNodes = new Set();
186
+
161
187
  for (let { dag, changedReleasableFiles } of packagesWithChanges) {
162
188
  if (!changedReleasableFiles.length) {
163
189
  continue;
@@ -167,24 +193,36 @@ function thirdPass({
167
193
  dag,
168
194
  parent,
169
195
  }) {
196
+ if (visitedNodes.has(dag.node.packageName)) {
197
+ // return;
198
+ }
199
+
200
+ visitedNodes.add(dag.node.packageName);
201
+
170
202
  let current = releaseTrees[dag.node.packageName];
171
203
 
172
204
  if (!current) {
173
205
  return;
174
206
  }
175
207
 
208
+ let isDevDep = dag.dependencyType === 'devDependencies';
176
209
  let currentReleaseType = current.releaseType;
177
-
178
210
  let incomingReleaseType = parent ? parent.releaseType : currentReleaseType;
179
211
 
180
- if (shouldInheritGreaterReleaseType && dag.dependencyType !== 'devDependencies' && isReleaseTypeLessThan(currentReleaseType, incomingReleaseType)) {
212
+ if (shouldInheritGreaterReleaseType && !isDevDep && isReleaseTypeLessThan(currentReleaseType, incomingReleaseType)) {
181
213
  currentReleaseType = incomingReleaseType;
182
214
  }
183
215
 
184
216
  current.releaseType = currentReleaseType;
185
217
 
218
+ let shouldVersionBump = !(shouldExcludeDevChanges && isDevDep);
219
+
220
+ if (shouldVersionBump) {
221
+ current[shouldVersionBumpSymbol]();
222
+ }
223
+
186
224
  for (let group of dag.node.dependents) {
187
- if (!group.node.isPackage || isCycle(group)) {
225
+ if (isCycle(group)) {
188
226
  continue;
189
227
  }
190
228
 
@@ -204,6 +242,8 @@ function fourthPass({
204
242
  packagesWithChanges,
205
243
  shouldBumpInRangeDependencies,
206
244
  }) {
245
+ let visitedNodes = new Set();
246
+
207
247
  for (let { dag, changedReleasableFiles } of packagesWithChanges) {
208
248
  if (!changedReleasableFiles.length) {
209
249
  continue;
@@ -213,6 +253,12 @@ function fourthPass({
213
253
  dag,
214
254
  parent,
215
255
  }) {
256
+ if (visitedNodes.has(dag.node.packageName)) {
257
+ // return;
258
+ }
259
+
260
+ visitedNodes.add(dag.node.packageName);
261
+
216
262
  let current = releaseTrees[dag.node.packageName];
217
263
 
218
264
  if (!current) {
@@ -290,6 +336,7 @@ async function buildReleaseGraph({
290
336
  releaseTrees,
291
337
  packagesWithChanges,
292
338
  shouldInheritGreaterReleaseType,
339
+ shouldExcludeDevChanges,
293
340
  });
294
341
 
295
342
  // dependents have now inherited release type