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 +1 -1
- package/src/build-release-graph.js +67 -20
package/package.json
CHANGED
@@ -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
|
-
|
75
|
+
let shouldVersionBump = false;
|
76
|
+
|
77
|
+
let releaseTree = {
|
82
78
|
oldVersion: version,
|
83
|
-
releaseType,
|
79
|
+
releaseType: defaultReleaseType,
|
84
80
|
cwd,
|
85
81
|
name,
|
86
|
-
|
87
|
-
|
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
|
-
|
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
|
147
|
+
await init({ dag, releaseTrees });
|
127
148
|
} else if (!isReleaseTypeInRange(parent.oldVersion, parent.releaseType, dag.dependencyRange)) {
|
128
|
-
await init({ dag, releaseTrees
|
149
|
+
await init({ dag, releaseTrees });
|
129
150
|
} else if (shouldBumpInRangeDependencies) {
|
130
|
-
await init({ dag, releaseTrees
|
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 &&
|
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 (
|
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
|