dep-up-surgeon 2.2.2 → 2.2.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/README.md +122 -12
- package/dist/cli/overrideFlow.d.ts +50 -0
- package/dist/cli/overrideFlow.d.ts.map +1 -1
- package/dist/cli/overrideFlow.js +112 -69
- package/dist/cli/overrideFlow.js.map +1 -1
- package/dist/cli/summary.d.ts.map +1 -1
- package/dist/cli/summary.js +17 -4
- package/dist/cli/summary.js.map +1 -1
- package/dist/cli/undo.d.ts +105 -0
- package/dist/cli/undo.d.ts.map +1 -0
- package/dist/cli/undo.js +410 -0
- package/dist/cli/undo.js.map +1 -0
- package/dist/cli/undoCommand.d.ts +2 -0
- package/dist/cli/undoCommand.d.ts.map +1 -0
- package/dist/cli/undoCommand.js +101 -0
- package/dist/cli/undoCommand.js.map +1 -0
- package/dist/cli.js +56 -14
- package/dist/cli.js.map +1 -1
- package/dist/config/loadConfig.d.ts +64 -0
- package/dist/config/loadConfig.d.ts.map +1 -1
- package/dist/config/loadConfig.js +200 -1
- package/dist/config/loadConfig.js.map +1 -1
- package/dist/core/audit.d.ts +18 -0
- package/dist/core/audit.d.ts.map +1 -1
- package/dist/core/audit.js +29 -0
- package/dist/core/audit.js.map +1 -1
- package/dist/core/peerResolver.d.ts +64 -0
- package/dist/core/peerResolver.d.ts.map +1 -1
- package/dist/core/peerResolver.js +225 -2
- package/dist/core/peerResolver.js.map +1 -1
- package/dist/core/peerResolverAdHoc.d.ts +42 -0
- package/dist/core/peerResolverAdHoc.d.ts.map +1 -0
- package/dist/core/peerResolverAdHoc.js +226 -0
- package/dist/core/peerResolverAdHoc.js.map +1 -0
- package/dist/core/upgrader.d.ts +12 -1
- package/dist/core/upgrader.d.ts.map +1 -1
- package/dist/core/upgrader.js +171 -7
- package/dist/core/upgrader.js.map +1 -1
- package/dist/types.d.ts +24 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/overrides.d.ts +81 -7
- package/dist/utils/overrides.d.ts.map +1 -1
- package/dist/utils/overrides.js +344 -30
- package/dist/utils/overrides.js.map +1 -1
- package/package.json +3 -3
|
@@ -87,6 +87,30 @@ export function buildDomain(input, peers, includePrereleases = false) {
|
|
|
87
87
|
* want: the FIRST solution is also the least-downgrade solution.
|
|
88
88
|
*/
|
|
89
89
|
export function resolvePeerRanges(domains, requested, options) {
|
|
90
|
+
if (domains.length === 0)
|
|
91
|
+
return undefined;
|
|
92
|
+
if (domains.some((d) => d.versions.length === 0))
|
|
93
|
+
return undefined;
|
|
94
|
+
// Dispatch: plain backtracking for the common small-graph case (the huge majority of
|
|
95
|
+
// linked failures are 2–5 members); the SAT-style solver for large graphs where the
|
|
96
|
+
// backtracker's 400-tuple budget runs out before it gets past the first variable.
|
|
97
|
+
const threshold = options.satThreshold ?? 10;
|
|
98
|
+
if (domains.length >= threshold) {
|
|
99
|
+
const sat = resolvePeerRangesSat(domains, requested, options);
|
|
100
|
+
if (sat)
|
|
101
|
+
return sat;
|
|
102
|
+
// Fall through to backtracking on failure — sometimes the SAT path prunes too
|
|
103
|
+
// aggressively (e.g. external-assume-satisfied + tight corner) and the plain DFS
|
|
104
|
+
// still manages to find a tuple. The extra work is bounded by `maxTuples`.
|
|
105
|
+
}
|
|
106
|
+
return resolvePeerRangesBacktracking(domains, requested, options);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Plain newest-first DFS backtracker. Fastest path for small graphs (2–5 members); gives up
|
|
110
|
+
* once `maxTuples` probes are exhausted. Kept as its own function so the dispatcher can call
|
|
111
|
+
* it directly AND so tests can assert specific tuple counts / paths.
|
|
112
|
+
*/
|
|
113
|
+
export function resolvePeerRangesBacktracking(domains, requested, options) {
|
|
90
114
|
if (domains.length === 0)
|
|
91
115
|
return undefined;
|
|
92
116
|
if (domains.some((d) => d.versions.length === 0))
|
|
@@ -124,7 +148,203 @@ export function resolvePeerRanges(domains, requested, options) {
|
|
|
124
148
|
downgradedFrom.set(name, req);
|
|
125
149
|
}
|
|
126
150
|
}
|
|
127
|
-
return { versions: new Map(assignment), downgradedFrom, tuplesExplored };
|
|
151
|
+
return { versions: new Map(assignment), downgradedFrom, tuplesExplored, method: 'backtracking' };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* SAT-style solver for **large** linked graphs (10+ members).
|
|
155
|
+
*
|
|
156
|
+
* Real Boolean SAT on this domain would need one variable per (member, version) pair plus
|
|
157
|
+
* exactly-one clauses plus implication clauses for every peer edge — O(members × versions²)
|
|
158
|
+
* clauses. That's fine but dragging in `pbsat` / `minisat` / `logic-solver` for a plumbing
|
|
159
|
+
* feature is overkill, so we instead implement the **arc-consistency + least-constraining
|
|
160
|
+
* value + conflict-directed backjumping** pipeline that's been the SAT baseline for CSP
|
|
161
|
+
* solvers since AC-3 (Mackworth 1977). For the shapes we actually see (monorepo link graphs
|
|
162
|
+
* up to ~50 linked members × ~30 recent versions) this finishes in milliseconds where plain
|
|
163
|
+
* DFS burns 400 probes in the leftmost subtree and returns nothing useful.
|
|
164
|
+
*
|
|
165
|
+
* Phases:
|
|
166
|
+
*
|
|
167
|
+
* 1. **Pair filtering**: for each ordered pair (A, B) in the linked set, build the set of
|
|
168
|
+
* allowed (a_version, b_version) tuples: a_version's peerDeps[B] must satisfy b_version,
|
|
169
|
+
* AND b_version's peerDeps[A] must satisfy a_version. External peers are checked once
|
|
170
|
+
* per member-version against `externalInstalled` and inconsistent versions are removed
|
|
171
|
+
* from the domain immediately.
|
|
172
|
+
* 2. **AC-3 propagation**: repeatedly remove any member-version that has no supporting
|
|
173
|
+
* partner in some other member's current domain. We run up to `satMaxRounds` sweeps or
|
|
174
|
+
* until a fixed point is reached. Each sweep is O(members² × versions).
|
|
175
|
+
* 3. **Ordered DFS**: after propagation, the domains only contain versions that are
|
|
176
|
+
* locally consistent with at least one choice per other member. Do a newest-first DFS
|
|
177
|
+
* ordered by **smallest domain first** (the MRV / fail-first heuristic: variables with
|
|
178
|
+
* fewer options go earlier so contradictions surface fast). This is where the
|
|
179
|
+
* "newest-first → least-downgrade" bias still applies at the value level.
|
|
180
|
+
*
|
|
181
|
+
* Returns `undefined` when propagation empties a domain (unsat) or when the DFS gives up on
|
|
182
|
+
* its budget. The caller can then retry with the plain backtracker (the dispatcher does
|
|
183
|
+
* this automatically).
|
|
184
|
+
*/
|
|
185
|
+
export function resolvePeerRangesSat(domains, requested, options) {
|
|
186
|
+
if (domains.length === 0)
|
|
187
|
+
return undefined;
|
|
188
|
+
if (domains.some((d) => d.versions.length === 0))
|
|
189
|
+
return undefined;
|
|
190
|
+
const memberNames = new Set(domains.map((d) => d.name));
|
|
191
|
+
const nameToIdx = new Map(domains.map((d, i) => [d.name, i]));
|
|
192
|
+
const satMaxRounds = options.satMaxRounds ?? 128;
|
|
193
|
+
// Working domains — these shrink as propagation prunes locally-inconsistent versions.
|
|
194
|
+
// Order is preserved (newest-first), so the DFS below still hits the least-downgrade
|
|
195
|
+
// tuple first for each pruned domain.
|
|
196
|
+
const working = domains.map((d) => [...d.versions]);
|
|
197
|
+
// Pre-prune against external peers: a member-version whose peer on an external package
|
|
198
|
+
// conflicts with the installed range is dead before any pair-wise check. Cheap O(N·V)
|
|
199
|
+
// sweep that short-circuits pathological inputs.
|
|
200
|
+
for (let i = 0; i < domains.length; i++) {
|
|
201
|
+
const d = domains[i];
|
|
202
|
+
working[i] = working[i].filter((v) => externalsSatisfied(d, v, memberNames, options.externalInstalled));
|
|
203
|
+
if (working[i].length === 0)
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
// Main AC-3 loop: repeat pair-wise pruning until no domain changes or we hit the round
|
|
207
|
+
// budget. Termination is guaranteed (domains strictly shrink) but we keep the budget
|
|
208
|
+
// anyway as a guard against pathological inputs we haven't seen yet.
|
|
209
|
+
for (let round = 0; round < satMaxRounds; round++) {
|
|
210
|
+
let changed = false;
|
|
211
|
+
for (let i = 0; i < domains.length; i++) {
|
|
212
|
+
for (let j = 0; j < domains.length; j++) {
|
|
213
|
+
if (i === j)
|
|
214
|
+
continue;
|
|
215
|
+
const before = working[i].length;
|
|
216
|
+
working[i] = pruneDomainAgainstPair(domains[i], working[i], domains[j], working[j], memberNames, options.externalInstalled);
|
|
217
|
+
if (working[i].length === 0)
|
|
218
|
+
return undefined;
|
|
219
|
+
if (working[i].length !== before)
|
|
220
|
+
changed = true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (!changed)
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
// Pruned domains are locally arc-consistent but not necessarily globally consistent — a
|
|
227
|
+
// triangle (A, B, C) can have every pair supported yet no common triple. So we still need
|
|
228
|
+
// a DFS over the pruned space, ordered by **smallest domain first** (MRV heuristic).
|
|
229
|
+
const order = [...working.map((_, i) => i)].sort((a, b) => {
|
|
230
|
+
const sa = working[a].length;
|
|
231
|
+
const sb = working[b].length;
|
|
232
|
+
if (sa !== sb)
|
|
233
|
+
return sa - sb;
|
|
234
|
+
return domains[a].name.localeCompare(domains[b].name);
|
|
235
|
+
});
|
|
236
|
+
const assignment = new Map();
|
|
237
|
+
let tuplesExplored = 0;
|
|
238
|
+
const maxTuples = options.maxTuples ?? 400 * Math.max(1, domains.length);
|
|
239
|
+
const recurse = (orderIdx) => {
|
|
240
|
+
if (orderIdx === order.length) {
|
|
241
|
+
tuplesExplored++;
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
const i = order[orderIdx];
|
|
245
|
+
const d = domains[i];
|
|
246
|
+
for (const v of working[i]) {
|
|
247
|
+
tuplesExplored++;
|
|
248
|
+
if (tuplesExplored > maxTuples)
|
|
249
|
+
return false;
|
|
250
|
+
assignment.set(d.name, v);
|
|
251
|
+
if (checkPartial(assignment, domains, memberNames, options.externalInstalled)) {
|
|
252
|
+
if (recurse(orderIdx + 1))
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
assignment.delete(d.name);
|
|
256
|
+
}
|
|
257
|
+
return false;
|
|
258
|
+
};
|
|
259
|
+
if (!recurse(0))
|
|
260
|
+
return undefined;
|
|
261
|
+
const downgradedFrom = new Map();
|
|
262
|
+
for (const [name, v] of assignment) {
|
|
263
|
+
const req = requested.get(name);
|
|
264
|
+
if (req && req !== v) {
|
|
265
|
+
downgradedFrom.set(name, req);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Sanity: `domains` order is the caller's order; emit versions keyed by name rather than
|
|
269
|
+
// order so callers can `.get(name)` without knowing how many members there are.
|
|
270
|
+
// `nameToIdx` is built for this; kept around for the (currently absent) diagnostic path
|
|
271
|
+
// where we'd surface which member blocked propagation.
|
|
272
|
+
void nameToIdx;
|
|
273
|
+
return { versions: new Map(assignment), downgradedFrom, tuplesExplored, method: 'sat' };
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Return the subset of `workingA` versions that have **at least one** supporting partner in
|
|
277
|
+
* `workingB` under the mutual peer constraints. A version `a` in domain A is "supported" by
|
|
278
|
+
* some `b` in B when:
|
|
279
|
+
*
|
|
280
|
+
* - `a.peerDependencies[B.name]` (if any) is satisfied by `b` — checked via `safeSatisfies`
|
|
281
|
+
* - `b.peerDependencies[A.name]` (if any) is satisfied by `a`
|
|
282
|
+
* - Both directions' external peers are already consistent (checked upstream by
|
|
283
|
+
* `externalsSatisfied`, so we don't redo it here — cheaper to filter the domain once).
|
|
284
|
+
*
|
|
285
|
+
* This is the AC-3 "revise(Xi, Xj)" step, tailored to our peer-deps semantics.
|
|
286
|
+
*/
|
|
287
|
+
function pruneDomainAgainstPair(dA, workingA, dB, workingB, memberNames, externalInstalled) {
|
|
288
|
+
void memberNames;
|
|
289
|
+
void externalInstalled;
|
|
290
|
+
if (workingB.length === 0)
|
|
291
|
+
return [];
|
|
292
|
+
return workingA.filter((va) => {
|
|
293
|
+
for (const vb of workingB) {
|
|
294
|
+
if (pairIsCompatible(dA, va, dB, vb))
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
return false;
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Do `dA@va` and `dB@vb` mutually satisfy each other's peerDependencies (if they peer on
|
|
302
|
+
* each other at all)? Unknown peers (not in the linked set, not in `externalInstalled`) are
|
|
303
|
+
* treated as "no constraint" — same as `checkPartial`.
|
|
304
|
+
*/
|
|
305
|
+
function pairIsCompatible(dA, va, dB, vb) {
|
|
306
|
+
const sa = dA.peers.get(va);
|
|
307
|
+
const sb = dB.peers.get(vb);
|
|
308
|
+
if (sa) {
|
|
309
|
+
const optional = sa.peerDependenciesMeta?.[dB.name]?.optional === true;
|
|
310
|
+
const range = sa.peerDependencies[dB.name];
|
|
311
|
+
if (range && !optional && !safeSatisfies(vb, range))
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
if (sb) {
|
|
315
|
+
const optional = sb.peerDependenciesMeta?.[dA.name]?.optional === true;
|
|
316
|
+
const range = sb.peerDependencies[dA.name];
|
|
317
|
+
if (range && !optional && !safeSatisfies(va, range))
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Return true when every **external** peer of `d@v` (i.e. a peer on a package NOT in the
|
|
324
|
+
* linked set) is satisfied by what's installed at the workspace root. Unknown externals are
|
|
325
|
+
* treated as "satisfied" per the module doc (we don't have the full install tree, and
|
|
326
|
+
* rejecting every candidate with an unknown peer would make the resolver useless).
|
|
327
|
+
*/
|
|
328
|
+
function externalsSatisfied(d, v, memberNames, externalInstalled) {
|
|
329
|
+
const slice = d.peers.get(v);
|
|
330
|
+
if (!slice)
|
|
331
|
+
return true;
|
|
332
|
+
for (const [peerName, peerRange] of Object.entries(slice.peerDependencies)) {
|
|
333
|
+
if (memberNames.has(peerName))
|
|
334
|
+
continue;
|
|
335
|
+
const optional = slice.peerDependenciesMeta?.[peerName]?.optional === true;
|
|
336
|
+
if (optional)
|
|
337
|
+
continue;
|
|
338
|
+
const ext = externalInstalled.get(peerName);
|
|
339
|
+
if (!ext)
|
|
340
|
+
continue;
|
|
341
|
+
const extMin = safeMin(ext);
|
|
342
|
+
if (!extMin)
|
|
343
|
+
continue;
|
|
344
|
+
if (!safeSatisfies(extMin, peerRange))
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
return true;
|
|
128
348
|
}
|
|
129
349
|
/**
|
|
130
350
|
* Check every peer constraint that BECOMES knowable under the current partial assignment.
|
|
@@ -208,6 +428,9 @@ export function describeResolution(tuple, input) {
|
|
|
208
428
|
parts.push(`${inp.name}: ${inp.requestedTarget} → ${final}`);
|
|
209
429
|
}
|
|
210
430
|
}
|
|
211
|
-
|
|
431
|
+
// Method tag on the end: `[backtracking]` or `[sat]`. The SAT path is the most common sign
|
|
432
|
+
// the commit body / summary consumer will want to spot — it implies the graph was big
|
|
433
|
+
// enough that the basic resolver would have given up.
|
|
434
|
+
return `peer-range intersection [${tuple.method}]: ${parts.join(', ')} (explored ${tuple.tuplesExplored})`;
|
|
212
435
|
}
|
|
213
436
|
//# sourceMappingURL=peerResolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peerResolver.js","sourceRoot":"","sources":["../../src/core/peerResolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"peerResolver.js","sourceRoot":"","sources":["../../src/core/peerResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ClassifiedConflict } from './conflictAnalyzer.js';
|
|
2
|
+
import type { RegistryCache } from '../utils/concurrency.js';
|
|
3
|
+
import type { PackageJson, ScannedPackage } from '../types.js';
|
|
4
|
+
import { type ResolvedTuple } from './peerResolver.js';
|
|
5
|
+
export interface AdHocResolveInput {
|
|
6
|
+
/** The package the engine was trying to bump (the "primary"). */
|
|
7
|
+
primary: ScannedPackage;
|
|
8
|
+
/** Version the engine wanted the primary at (the `@latest` or fallback ladder value). */
|
|
9
|
+
primaryTarget: string;
|
|
10
|
+
/** Classified peer-dep conflicts the parser extracted from the failed install output. */
|
|
11
|
+
classified: ClassifiedConflict[];
|
|
12
|
+
/** Workspace `package.json` contents — used to filter blockers to DIRECT deps only. */
|
|
13
|
+
pkg: PackageJson;
|
|
14
|
+
registryCache?: RegistryCache;
|
|
15
|
+
/** Upper bound on ad-hoc group size including the primary. Default 6. */
|
|
16
|
+
maxAdHocMembers?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface AdHocResolveResult {
|
|
19
|
+
/** Names + target versions the caller must set on `package.json` before retry. */
|
|
20
|
+
bumps: Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
from: string;
|
|
23
|
+
to: string;
|
|
24
|
+
isPrimary: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
/** Human-readable reason (reused as `UpgradeRecord.resolvedPeer.reason`). */
|
|
27
|
+
reason: string;
|
|
28
|
+
/** Forwarded from the resolver so the caller can populate `resolvedPeer.tuplesExplored`. */
|
|
29
|
+
tuplesExplored: number;
|
|
30
|
+
/** Which solver path produced the tuple (`'backtracking'` or `'sat'`). */
|
|
31
|
+
method: ResolvedTuple['method'];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Try to find a satisfiable tuple for a single-package bump that failed with a peer conflict.
|
|
35
|
+
* Returns `undefined` when:
|
|
36
|
+
* - No blockers from `classified` are direct deps of the workspace (no ad-hoc group can
|
|
37
|
+
* form — only the primary would be in it, and single-member resolution is a no-op).
|
|
38
|
+
* - Any registry fetch fails (we'd be guessing).
|
|
39
|
+
* - The resolver can't find a tuple within its budget.
|
|
40
|
+
*/
|
|
41
|
+
export declare function tryResolveAdHocPeerConflict(input: AdHocResolveInput): Promise<AdHocResolveResult | undefined>;
|
|
42
|
+
//# sourceMappingURL=peerResolverAdHoc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peerResolverAdHoc.d.ts","sourceRoot":"","sources":["../../src/core/peerResolverAdHoc.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAKL,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,OAAO,EAAE,cAAc,CAAC;IACxB,yFAAyF;IACzF,aAAa,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,uFAAuF;IACvF,GAAG,EAAE,WAAW,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7E,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CACjC;AAKD;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAkHzC"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ad-hoc peer-range resolver for **non-linked** (single-package) upgrade failures.
|
|
3
|
+
*
|
|
4
|
+
* Context: the main resolver in `peerResolver.ts` only fires for LINKED GROUPS — batches
|
|
5
|
+
* like (`react`, `react-dom`, `@types/react`) that ship together. Single-package bumps that
|
|
6
|
+
* fail with a peer conflict (e.g. "bumping `eslint-plugin-react-hooks` alone but it peers
|
|
7
|
+
* on a `react` range the project doesn't have") were rolled back unconditionally.
|
|
8
|
+
*
|
|
9
|
+
* This module closes that gap. Given a failed single bump + the npm/pnpm/yarn output that
|
|
10
|
+
* flagged the peer conflict, we:
|
|
11
|
+
*
|
|
12
|
+
* 1. Parse the blocker graph from the install output (who demands what).
|
|
13
|
+
* 2. Build an **ad-hoc linked group** containing the bump target PLUS every blocker that
|
|
14
|
+
* is **already a direct dep** of the workspace (peers on random transitives are out of
|
|
15
|
+
* scope — we can't upgrade a package we don't own).
|
|
16
|
+
* 3. Run `resolvePeerRanges()` on that synthesized group, exactly like the linked-group
|
|
17
|
+
* path does. If a tuple is found, the caller retries the install with all members at
|
|
18
|
+
* the resolved versions. If not, the caller rolls the single bump back as before.
|
|
19
|
+
*
|
|
20
|
+
* Non-goals + safety rails:
|
|
21
|
+
*
|
|
22
|
+
* - We never ADD packages to `package.json`. The ad-hoc group is filtered down to
|
|
23
|
+
* packages the workspace already declares as a direct dep. Peers on transitives stay
|
|
24
|
+
* unresolved → caller falls back to the standard rollback.
|
|
25
|
+
* - We never pull a blocker FORWARD past its currently pinned range. The resolver's
|
|
26
|
+
* `buildDomain()` already respects `currentRange` as the lower bound, but we also cap
|
|
27
|
+
* the `requestedTarget` for blockers at the newest version that satisfies the existing
|
|
28
|
+
* range — ad-hoc resolution is allowed to downgrade the *target* of the bump, never to
|
|
29
|
+
* secretly also bump an unrelated dep that happened to appear in the peer graph.
|
|
30
|
+
* - The ad-hoc group is capped at `maxAdHocMembers` (default 6) to keep registry fetch
|
|
31
|
+
* costs bounded. Beyond that the savings vanish (huge peer graphs with lots of blockers
|
|
32
|
+
* usually need manual attention) and the resolver would timeout anyway.
|
|
33
|
+
*/
|
|
34
|
+
import semver from 'semver';
|
|
35
|
+
import { fetchVersionPeers, fetchLatestVersion } from '../utils/npm.js';
|
|
36
|
+
import { buildDomain, describeResolution, resolvePeerRanges, } from './peerResolver.js';
|
|
37
|
+
/**
|
|
38
|
+
* Try to find a satisfiable tuple for a single-package bump that failed with a peer conflict.
|
|
39
|
+
* Returns `undefined` when:
|
|
40
|
+
* - No blockers from `classified` are direct deps of the workspace (no ad-hoc group can
|
|
41
|
+
* form — only the primary would be in it, and single-member resolution is a no-op).
|
|
42
|
+
* - Any registry fetch fails (we'd be guessing).
|
|
43
|
+
* - The resolver can't find a tuple within its budget.
|
|
44
|
+
*/
|
|
45
|
+
export async function tryResolveAdHocPeerConflict(input) {
|
|
46
|
+
const { primary, primaryTarget, classified, pkg, registryCache } = input;
|
|
47
|
+
const maxMembers = input.maxAdHocMembers ?? 6;
|
|
48
|
+
const directDeps = indexDirectDeps(pkg);
|
|
49
|
+
// Pull blocker names out of the classified conflicts. `dependency` is the package that
|
|
50
|
+
// wants a peer; `depender` is who's complaining about it. For peer-mismatch rows, the
|
|
51
|
+
// "blocker" — the package we might need to downgrade to match the primary's peer
|
|
52
|
+
// expectations — is usually the DEPENDER (it's the one at a version that doesn't satisfy
|
|
53
|
+
// the primary's peer requirement). We include BOTH fields in the candidate set and let
|
|
54
|
+
// the `directDeps` filter drop whichever isn't a direct dep.
|
|
55
|
+
const blockerNames = new Set();
|
|
56
|
+
for (const c of classified) {
|
|
57
|
+
if (c.category !== 'peerDependencyMismatch' && c.category !== 'missingDependency')
|
|
58
|
+
continue;
|
|
59
|
+
if (c.depender && c.depender !== 'unknown' && c.depender !== primary.name) {
|
|
60
|
+
blockerNames.add(c.depender);
|
|
61
|
+
}
|
|
62
|
+
if (c.dependency && c.dependency !== 'unknown' && c.dependency !== primary.name) {
|
|
63
|
+
blockerNames.add(c.dependency);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const blockers = [];
|
|
67
|
+
for (const name of blockerNames) {
|
|
68
|
+
const hit = directDeps.get(name);
|
|
69
|
+
if (hit)
|
|
70
|
+
blockers.push(hit);
|
|
71
|
+
}
|
|
72
|
+
if (blockers.length === 0) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
// Pick a stable, newest-first order for the blockers and cap the group size. Blockers are
|
|
76
|
+
// sorted alphabetically so cached peer fetches hit consistently across runs; the `slice`
|
|
77
|
+
// preserves whichever blockers came in first when the cap kicks in.
|
|
78
|
+
blockers.sort((a, b) => a.name.localeCompare(b.name));
|
|
79
|
+
const capped = blockers.slice(0, Math.max(1, maxMembers - 1));
|
|
80
|
+
// Assemble resolver inputs: primary + each blocker. For blockers we use the newest
|
|
81
|
+
// version **compatible with the existing range** as the upper bound — we never silently
|
|
82
|
+
// upgrade a blocker past what the user pinned.
|
|
83
|
+
const inputs = [
|
|
84
|
+
{
|
|
85
|
+
name: primary.name,
|
|
86
|
+
currentRange: primary.currentRange,
|
|
87
|
+
requestedTarget: primaryTarget,
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
for (const b of capped) {
|
|
91
|
+
const currentMax = await resolveExistingUpperBound(b.name, b.range, registryCache);
|
|
92
|
+
if (!currentMax)
|
|
93
|
+
continue;
|
|
94
|
+
inputs.push({ name: b.name, currentRange: b.range, requestedTarget: currentMax });
|
|
95
|
+
}
|
|
96
|
+
// After filtering, we need at least one blocker alongside the primary — otherwise the
|
|
97
|
+
// resolver degenerates into "is the primary alone satisfiable against externals?", which
|
|
98
|
+
// `buildDomain` already answered implicitly.
|
|
99
|
+
if (inputs.length < 2)
|
|
100
|
+
return undefined;
|
|
101
|
+
const domains = [];
|
|
102
|
+
for (const inp of inputs) {
|
|
103
|
+
const peers = await fetchVersionPeers(inp.name, registryCache);
|
|
104
|
+
if (peers.size === 0)
|
|
105
|
+
return undefined;
|
|
106
|
+
const d = buildDomain(inp, peers);
|
|
107
|
+
if (d.versions.length === 0)
|
|
108
|
+
return undefined;
|
|
109
|
+
domains.push(d);
|
|
110
|
+
}
|
|
111
|
+
// External-installed map: every workspace direct-dep that's NOT in the ad-hoc group. Same
|
|
112
|
+
// construction the linked-group path uses — the resolver treats these as fixed constraints.
|
|
113
|
+
const memberNames = new Set(inputs.map((i) => i.name));
|
|
114
|
+
const externalInstalled = new Map();
|
|
115
|
+
for (const [name, dd] of directDeps) {
|
|
116
|
+
if (!memberNames.has(name))
|
|
117
|
+
externalInstalled.set(name, dd.range);
|
|
118
|
+
}
|
|
119
|
+
const requested = new Map(inputs.map((i) => [i.name, i.requestedTarget]));
|
|
120
|
+
const resolved = resolvePeerRanges(domains, requested, { externalInstalled });
|
|
121
|
+
if (!resolved)
|
|
122
|
+
return undefined;
|
|
123
|
+
// Build the `bumps` list. A blocker whose resolved version EQUALS the value already in
|
|
124
|
+
// `package.json` (i.e. the resolver didn't ask us to move it) is omitted — no point
|
|
125
|
+
// writing an identical range back.
|
|
126
|
+
const bumps = [];
|
|
127
|
+
for (const inp of inputs) {
|
|
128
|
+
const resolvedVersion = resolved.versions.get(inp.name);
|
|
129
|
+
if (!resolvedVersion)
|
|
130
|
+
continue;
|
|
131
|
+
const isPrimary = inp.name === primary.name;
|
|
132
|
+
const currentPin = isPrimary ? primary.currentRange : capped.find((b) => b.name === inp.name)?.range ?? inp.currentRange;
|
|
133
|
+
const currentFloor = safeMin(currentPin);
|
|
134
|
+
if (!isPrimary && currentFloor && resolvedVersion === currentFloor) {
|
|
135
|
+
// Blocker stayed at its current floor — no mutation needed.
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
bumps.push({
|
|
139
|
+
name: inp.name,
|
|
140
|
+
from: currentPin,
|
|
141
|
+
to: resolvedVersion,
|
|
142
|
+
isPrimary,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// If the only bump left is the primary AND the resolver chose the original target, there's
|
|
146
|
+
// nothing new to try → bail out so the engine doesn't spin on an identical retry.
|
|
147
|
+
const onlyPrimaryUnchanged = bumps.length === 1 && bumps[0].isPrimary && bumps[0].to === primaryTarget;
|
|
148
|
+
if (onlyPrimaryUnchanged)
|
|
149
|
+
return undefined;
|
|
150
|
+
const reason = describeResolution(resolved, inputs);
|
|
151
|
+
return {
|
|
152
|
+
bumps,
|
|
153
|
+
reason: `ad-hoc ${reason}`,
|
|
154
|
+
tuplesExplored: resolved.tuplesExplored,
|
|
155
|
+
method: resolved.method,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Flatten all four dependency sections of `package.json` into a `name → { section, range }`
|
|
160
|
+
* map. `dependencies` win over `devDependencies` when duplicated (same precedence npm uses
|
|
161
|
+
* for the actual install), and peer/optional sections are included so an ad-hoc group can
|
|
162
|
+
* move a peer-dep-only package too (common in plugin ecosystems like eslint-plugin-*).
|
|
163
|
+
*/
|
|
164
|
+
function indexDirectDeps(pkg) {
|
|
165
|
+
const out = new Map();
|
|
166
|
+
const sections = [
|
|
167
|
+
'dependencies',
|
|
168
|
+
'devDependencies',
|
|
169
|
+
'peerDependencies',
|
|
170
|
+
'optionalDependencies',
|
|
171
|
+
];
|
|
172
|
+
for (const section of sections) {
|
|
173
|
+
const block = pkg[section];
|
|
174
|
+
if (!block)
|
|
175
|
+
continue;
|
|
176
|
+
for (const [name, range] of Object.entries(block)) {
|
|
177
|
+
if (typeof range !== 'string')
|
|
178
|
+
continue;
|
|
179
|
+
if (!out.has(name)) {
|
|
180
|
+
out.set(name, { name, section, range });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Given a pinned range like `^17.0.0`, return the newest published version that still
|
|
188
|
+
* satisfies it. Used to cap blocker `requestedTarget` at "the newest compatible release" so
|
|
189
|
+
* the ad-hoc resolver never silently bumps a blocker past its current range.
|
|
190
|
+
*
|
|
191
|
+
* Returns `undefined` when the registry fetch fails OR when no published version satisfies
|
|
192
|
+
* the range (rare — usually means the lockfile references a deleted / unpublished version).
|
|
193
|
+
*/
|
|
194
|
+
async function resolveExistingUpperBound(name, range, registryCache) {
|
|
195
|
+
try {
|
|
196
|
+
// `fetchLatestVersion` returns the registry's `latest` dist-tag. If it already satisfies
|
|
197
|
+
// the pin (rare, but happens for packages at a wildcard like `*`), we use it directly.
|
|
198
|
+
// Otherwise we fall back to the floor of the current range — `semver.minVersion(range)`
|
|
199
|
+
// — which is always a valid published version (modulo deleted tarballs).
|
|
200
|
+
const latest = await fetchLatestVersion(name, registryCache);
|
|
201
|
+
if (semver.valid(latest) && safeSatisfies(latest, range)) {
|
|
202
|
+
return latest;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Network / registry miss — fall through to the floor.
|
|
207
|
+
}
|
|
208
|
+
return safeMin(range);
|
|
209
|
+
}
|
|
210
|
+
function safeMin(range) {
|
|
211
|
+
try {
|
|
212
|
+
return semver.minVersion(range)?.version;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function safeSatisfies(version, range) {
|
|
219
|
+
try {
|
|
220
|
+
return semver.satisfies(version, range, { includePrerelease: true });
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=peerResolverAdHoc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peerResolverAdHoc.js","sourceRoot":"","sources":["../../src/core/peerResolverAdHoc.ts"],"names":[],"mappings":"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"}
|
package/dist/core/upgrader.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { FinalReport, UpgradeRecord } from '../types.js';
|
|
2
2
|
import type { PackageJson } from '../types.js';
|
|
3
3
|
import { type ValidationOptions, type ValidationResult } from './validator.js';
|
|
4
|
+
import { runInstall } from '../utils/npm.js';
|
|
4
5
|
import { type PackageManager, type ProjectInfo } from './workspaces.js';
|
|
5
6
|
import { KeyedMutex, type RegistryCache } from '../utils/concurrency.js';
|
|
6
7
|
declare const BACKUP_FILENAME = "package.json.dep-up-surgeon.bak";
|
|
@@ -144,6 +145,16 @@ export interface UpgradeEngineOptions {
|
|
|
144
145
|
* silently bump things off latest.
|
|
145
146
|
*/
|
|
146
147
|
resolvePeers?: boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Override for the install step. When omitted, the engine uses `runInstall` from
|
|
150
|
+
* `utils/npm.ts` which shells out to `<manager> install`. Tests inject a stub so the
|
|
151
|
+
* rollback / peer / validator paths can be exercised without actually installing from
|
|
152
|
+
* the registry. Signature is the same as `runInstall` so switching to a real binary is
|
|
153
|
+
* zero-cost at runtime.
|
|
154
|
+
*
|
|
155
|
+
* Never exposed on the CLI — this is a programmatic hook exclusively.
|
|
156
|
+
*/
|
|
157
|
+
installer?: typeof runInstall;
|
|
147
158
|
}
|
|
148
159
|
/**
|
|
149
160
|
* Payload passed to `onUpgradeApplied`. For single upgrades `records` has length 1; for batched
|
|
@@ -202,7 +213,7 @@ export { backupPackageJson, BACKUP_FILENAME };
|
|
|
202
213
|
* (root is included if `'root'` appears in the list).
|
|
203
214
|
*/
|
|
204
215
|
export type WorkspaceMode = 'root-only' | 'all' | 'workspaces-only' | string[];
|
|
205
|
-
export interface UpgradeFlowOptions extends Omit<UpgradeEngineOptions, 'cwd' | 'installCwd' | 'targetLabel' | 'skipPreflight' | 'installFilter' | 'installLock' | '
|
|
216
|
+
export interface UpgradeFlowOptions extends Omit<UpgradeEngineOptions, 'cwd' | 'installCwd' | 'targetLabel' | 'skipPreflight' | 'installFilter' | 'installLock' | 'onUpgradeApplied'> {
|
|
206
217
|
/** Workspace root (where the lockfile and the `workspaces` field live). */
|
|
207
218
|
cwd: string;
|
|
208
219
|
/** Which `package.json` files to traverse. Defaults to `'root-only'`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../src/core/upgrader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIV,WAAW,EAGX,aAAa,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAmB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../src/core/upgrader.ts"],"names":[],"mappings":"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"}
|