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.
Files changed (45) hide show
  1. package/README.md +122 -12
  2. package/dist/cli/overrideFlow.d.ts +50 -0
  3. package/dist/cli/overrideFlow.d.ts.map +1 -1
  4. package/dist/cli/overrideFlow.js +112 -69
  5. package/dist/cli/overrideFlow.js.map +1 -1
  6. package/dist/cli/summary.d.ts.map +1 -1
  7. package/dist/cli/summary.js +17 -4
  8. package/dist/cli/summary.js.map +1 -1
  9. package/dist/cli/undo.d.ts +105 -0
  10. package/dist/cli/undo.d.ts.map +1 -0
  11. package/dist/cli/undo.js +410 -0
  12. package/dist/cli/undo.js.map +1 -0
  13. package/dist/cli/undoCommand.d.ts +2 -0
  14. package/dist/cli/undoCommand.d.ts.map +1 -0
  15. package/dist/cli/undoCommand.js +101 -0
  16. package/dist/cli/undoCommand.js.map +1 -0
  17. package/dist/cli.js +56 -14
  18. package/dist/cli.js.map +1 -1
  19. package/dist/config/loadConfig.d.ts +64 -0
  20. package/dist/config/loadConfig.d.ts.map +1 -1
  21. package/dist/config/loadConfig.js +200 -1
  22. package/dist/config/loadConfig.js.map +1 -1
  23. package/dist/core/audit.d.ts +18 -0
  24. package/dist/core/audit.d.ts.map +1 -1
  25. package/dist/core/audit.js +29 -0
  26. package/dist/core/audit.js.map +1 -1
  27. package/dist/core/peerResolver.d.ts +64 -0
  28. package/dist/core/peerResolver.d.ts.map +1 -1
  29. package/dist/core/peerResolver.js +225 -2
  30. package/dist/core/peerResolver.js.map +1 -1
  31. package/dist/core/peerResolverAdHoc.d.ts +42 -0
  32. package/dist/core/peerResolverAdHoc.d.ts.map +1 -0
  33. package/dist/core/peerResolverAdHoc.js +226 -0
  34. package/dist/core/peerResolverAdHoc.js.map +1 -0
  35. package/dist/core/upgrader.d.ts +12 -1
  36. package/dist/core/upgrader.d.ts.map +1 -1
  37. package/dist/core/upgrader.js +171 -7
  38. package/dist/core/upgrader.js.map +1 -1
  39. package/dist/types.d.ts +24 -4
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/utils/overrides.d.ts +81 -7
  42. package/dist/utils/overrides.d.ts.map +1 -1
  43. package/dist/utils/overrides.js +344 -30
  44. package/dist/utils/overrides.js.map +1 -1
  45. 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
- return `peer-range intersection: ${parts.join(', ')} (explored ${tuple.tuplesExplored})`;
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,MAAM,MAAM,QAAQ,CAAC;AA4D5B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,KAAoB,EACpB,KAAgC,EAChC,kBAAkB,GAAG,KAAK;IAE1B,MAAM,MAAM,GAAoB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAC1E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,qFAAqF;IACvF,CAAC;IACD,MAAM,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,kBAAkB,IAAI,iBAAiB,CAAC;IAEzD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,SAAS;QAC/B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,KAAK,EAAE,UAAU;YAAE,SAAS;QAChC,IAAI,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC;YAAE,SAAS;QACrD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC;YAAE,SAAS;QAClD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA0B,EAC1B,SAA8B,EAC9B,OAAuB;IAEvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,MAAM,OAAO,GAAG,CAAC,CAAS,EAAW,EAAE;QACrC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,cAAc,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,cAAc,EAAE,CAAC;YACjB,IAAI,cAAc,GAAG,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC7C,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC9E,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;YAClC,CAAC;YACD,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAE1B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACrB,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,YAAY,CACnB,UAA+B,EAC/B,OAA0B,EAC1B,WAAwB,EACxB,iBAAsC;IAEtC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;YAC3E,IAAI,QAAQ;gBAAE,SAAS;YACvB,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY;oBAAE,SAAS,CAAC,0BAA0B;gBACvD,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG;oBAAE,SAAS,CAAC,qCAAqC;gBACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;oBAAE,OAAO,KAAK,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,SAAS,OAAO,CAAC,KAAa;IAC5B,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,SAAS,aAAa,CAAC,OAAe,EAAE,KAAa;IACnD,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB,EAAE,KAAsB;IAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,KAAK,KAAK,GAAG,CAAC,eAAe,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,eAAe,MAAM,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,4BAA4B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,cAAc,GAAG,CAAC;AAC3F,CAAC"}
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AA8B3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAwB;IAExB,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACzE,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACxC,uFAAuF;IACvF,sFAAsF;IACtF,iFAAiF;IACjF,yFAAyF;IACzF,uFAAuF;IACvF,6DAA6D;IAC7D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,QAAQ,KAAK,wBAAwB,IAAI,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAAE,SAAS;QAC5F,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1E,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAChF,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,0FAA0F;IAC1F,yFAAyF;IACzF,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9D,mFAAmF;IACnF,wFAAwF;IACxF,+CAA+C;IAC/C,MAAM,MAAM,GAAoB;QAC9B;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,aAAa;SAC/B;KACF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACnF,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,sFAAsF;IACtF,yFAAyF;IACzF,6CAA6C;IAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/D,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACvC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0FAA0F;IAC1F,4FAA4F;IAC5F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,uFAAuF;IACvF,oFAAoF;IACpF,mCAAmC;IACnC,MAAM,KAAK,GAAgC,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe;YAAE,SAAS;QAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC;QACzH,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,eAAe,KAAK,YAAY,EAAE,CAAC;YACnE,4DAA4D;YAC5D,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,eAAe;YACnB,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,2FAA2F;IAC3F,kFAAkF;IAClF,MAAM,oBAAoB,GACxB,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,KAAK,aAAa,CAAC;IAC9E,IAAI,oBAAoB;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO;QACL,KAAK;QACL,MAAM,EAAE,UAAU,MAAM,EAAE;QAC1B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,GAAgB;IACvC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,MAAM,QAAQ,GAAiB;QAC7B,cAAc;QACd,iBAAiB;QACjB,kBAAkB;QAClB,sBAAsB;KACvB,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,yBAAyB,CACtC,IAAY,EACZ,KAAa,EACb,aAAwC;IAExC,IAAI,CAAC;QACH,yFAAyF;QACzF,uFAAuF;QACvF,wFAAwF;QACxF,yEAAyE;QACzE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,KAAa;IACnD,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -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' | 'registryCache' | 'onUpgradeApplied'> {
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":"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"}
1
+ {"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../src/core/upgrader.ts"],"names":[],"mappings":"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"}