monorepo-next 8.0.1 → 8.0.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-next",
3
- "version": "8.0.1",
3
+ "version": "8.0.4",
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
 
@@ -120,18 +134,19 @@ async function secondPass({
120
134
  let doesPackageHaveChanges = !!releaseTrees[dag.node.packageName];
121
135
  if (!doesPackageHaveChanges) {
122
136
  let isDevDep = dag.dependencyType === 'devDependencies';
123
- let shouldVersionBump = !shouldExcludeDevChanges || !isDevDep;
124
137
 
125
138
  if (dag.node.isPackage && shouldInheritGreaterReleaseType && !isDevDep && shouldBumpInRangeDependencies) {
126
- await init({ dag, releaseTrees, releaseType: parent.releaseType });
139
+ await init({ dag, releaseTrees });
127
140
  } else if (!isReleaseTypeInRange(parent.oldVersion, parent.releaseType, dag.dependencyRange)) {
128
- await init({ dag, releaseTrees, releaseType: defaultReleaseType, shouldVersionBump });
141
+ await init({ dag, releaseTrees });
129
142
  } else if (shouldBumpInRangeDependencies) {
130
- await init({ dag, releaseTrees, releaseType: defaultReleaseType, shouldVersionBump });
143
+ await init({ dag, releaseTrees });
131
144
  } else {
132
145
  return;
133
146
  }
134
147
 
148
+ let shouldVersionBump = !(shouldExcludeDevChanges && isDevDep);
149
+
135
150
  if (!shouldVersionBump) {
136
151
  return;
137
152
  }
@@ -157,6 +172,7 @@ function thirdPass({
157
172
  releaseTrees,
158
173
  packagesWithChanges,
159
174
  shouldInheritGreaterReleaseType,
175
+ shouldExcludeDevChanges,
160
176
  }) {
161
177
  for (let { dag, changedReleasableFiles } of packagesWithChanges) {
162
178
  if (!changedReleasableFiles.length) {
@@ -173,18 +189,24 @@ function thirdPass({
173
189
  return;
174
190
  }
175
191
 
192
+ let isDevDep = dag.dependencyType === 'devDependencies';
176
193
  let currentReleaseType = current.releaseType;
177
-
178
194
  let incomingReleaseType = parent ? parent.releaseType : currentReleaseType;
179
195
 
180
- if (shouldInheritGreaterReleaseType && dag.dependencyType !== 'devDependencies' && isReleaseTypeLessThan(currentReleaseType, incomingReleaseType)) {
196
+ if (shouldInheritGreaterReleaseType && !isDevDep && isReleaseTypeLessThan(currentReleaseType, incomingReleaseType)) {
181
197
  currentReleaseType = incomingReleaseType;
182
198
  }
183
199
 
184
200
  current.releaseType = currentReleaseType;
185
201
 
202
+ let shouldVersionBump = !(shouldExcludeDevChanges && isDevDep);
203
+
204
+ if (shouldVersionBump) {
205
+ current[shouldVersionBumpSymbol]();
206
+ }
207
+
186
208
  for (let group of dag.node.dependents) {
187
- if (!group.node.isPackage || isCycle(group)) {
209
+ if (isCycle(group)) {
188
210
  continue;
189
211
  }
190
212
 
@@ -221,11 +243,11 @@ function fourthPass({
221
243
 
222
244
  for (let type of dependencyTypes) {
223
245
  if (!current[type]) {
224
- current[type] = [];
246
+ current[type] = {};
225
247
  }
226
248
  }
227
249
 
228
- if (parent && !current[dag.dependencyType].some(({ name }) => name === parent.name)) {
250
+ if (parent && !current[dag.dependencyType][parent.name]) {
229
251
  let { name } = parent;
230
252
 
231
253
  let oldRange = dag.dependencyRange;
@@ -242,10 +264,7 @@ function fourthPass({
242
264
  });
243
265
  }
244
266
 
245
- current[dag.dependencyType].push({
246
- name,
247
- newRange,
248
- });
267
+ current[dag.dependencyType][name] = newRange;
249
268
  }
250
269
 
251
270
  for (let group of dag.node.dependents) {
@@ -293,6 +312,7 @@ async function buildReleaseGraph({
293
312
  releaseTrees,
294
313
  packagesWithChanges,
295
314
  shouldInheritGreaterReleaseType,
315
+ shouldExcludeDevChanges,
296
316
  });
297
317
 
298
318
  // dependents have now inherited release type
package/src/release.js CHANGED
@@ -82,7 +82,7 @@ async function release({
82
82
  for (let type of dependencyTypes) {
83
83
  let deps = releaseTree[type];
84
84
 
85
- for (let { name, newRange } of deps) {
85
+ for (let [name, newRange] of Object.entries(deps)) {
86
86
  packageJson[type][name] = newRange;
87
87
  }
88
88
  }