pnpm-dedup 2.1.0 → 2.2.2

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 (89) hide show
  1. package/README.md +15 -5
  2. package/dist/applyClusterFixes.js +103 -80
  3. package/dist/applyClusterFixes.js.map +1 -1
  4. package/dist/applyClusterFixes.test.js +257 -29
  5. package/dist/applyClusterFixes.test.js.map +1 -1
  6. package/dist/bin/pnpm-dedupe.js +0 -0
  7. package/dist/bin/pnpm-why-duplicate.js +0 -0
  8. package/dist/bin/pnpm-why-duplicate.test.js +17 -8
  9. package/dist/bin/pnpm-why-duplicate.test.js.map +1 -1
  10. package/dist/dedupe.js +15 -4
  11. package/dist/dedupe.js.map +1 -1
  12. package/dist/dedupeCheckConsistency.test.js +53 -59
  13. package/dist/dedupeCheckConsistency.test.js.map +1 -1
  14. package/dist/dedupeEndToEnd.test.js +3 -3
  15. package/dist/dedupeEndToEnd.test.js.map +1 -1
  16. package/dist/dedupePeers.test.js +1 -1
  17. package/dist/dedupePeers.test.js.map +1 -1
  18. package/dist/definitions/applyClusterFixes.d.ts +6 -3
  19. package/dist/definitions/applyClusterFixes.d.ts.map +1 -1
  20. package/dist/definitions/dedupe.d.ts.map +1 -1
  21. package/dist/definitions/helpers/describeUnheldOverride.d.ts +10 -0
  22. package/dist/definitions/helpers/describeUnheldOverride.d.ts.map +1 -0
  23. package/dist/definitions/helpers/describeUnheldOverride.test.d.ts +2 -0
  24. package/dist/definitions/helpers/describeUnheldOverride.test.d.ts.map +1 -0
  25. package/dist/definitions/helpers/pnpmWorkspaceYaml.d.ts +1 -5
  26. package/dist/definitions/helpers/pnpmWorkspaceYaml.d.ts.map +1 -1
  27. package/dist/definitions/pnpmLockTypes.d.ts +1 -0
  28. package/dist/definitions/pnpmLockTypes.d.ts.map +1 -1
  29. package/dist/definitions/readPnpmLock.d.ts +7 -0
  30. package/dist/definitions/readPnpmLock.d.ts.map +1 -1
  31. package/dist/definitions/readPnpmLock.test.d.ts +2 -0
  32. package/dist/definitions/readPnpmLock.test.d.ts.map +1 -0
  33. package/dist/displayMany.test.js +3 -4
  34. package/dist/displayMany.test.js.map +1 -1
  35. package/dist/helpers/buildIdentifiedFixesMap.test.js +1 -1
  36. package/dist/helpers/buildIdentifiedFixesMap.test.js.map +1 -1
  37. package/dist/helpers/buildPnpmPackagesMap.test.js +1 -1
  38. package/dist/helpers/buildPnpmPackagesMap.test.js.map +1 -1
  39. package/dist/helpers/collectDependentRanges.test.js +1 -1
  40. package/dist/helpers/collectDependentRanges.test.js.map +1 -1
  41. package/dist/helpers/collectPnpmDependents.test.js +1 -1
  42. package/dist/helpers/collectPnpmDependents.test.js.map +1 -1
  43. package/dist/helpers/describeUnheldOverride.js +30 -0
  44. package/dist/helpers/describeUnheldOverride.js.map +1 -0
  45. package/dist/helpers/describeUnheldOverride.test.js +80 -0
  46. package/dist/helpers/describeUnheldOverride.test.js.map +1 -0
  47. package/dist/helpers/parsePnpmLockPackages.test.js +1 -1
  48. package/dist/helpers/parsePnpmLockPackages.test.js.map +1 -1
  49. package/dist/helpers/pnpmWorkspaceYaml.js +2 -17
  50. package/dist/helpers/pnpmWorkspaceYaml.js.map +1 -1
  51. package/dist/helpers/pnpmWorkspaceYaml.test.js +3 -5
  52. package/dist/helpers/pnpmWorkspaceYaml.test.js.map +1 -1
  53. package/dist/helpers/readInstalledManifest.test.js +1 -1
  54. package/dist/helpers/readInstalledManifest.test.js.map +1 -1
  55. package/dist/helpers/toLockstepGraph.test.js +1 -1
  56. package/dist/helpers/toLockstepGraph.test.js.map +1 -1
  57. package/dist/identifyClusterFixes.test.js +22 -41
  58. package/dist/identifyClusterFixes.test.js.map +1 -1
  59. package/dist/identifyResolutionFixes.test.js +8 -7
  60. package/dist/identifyResolutionFixes.test.js.map +1 -1
  61. package/dist/readPnpmLock.js +21 -2
  62. package/dist/readPnpmLock.js.map +1 -1
  63. package/dist/readPnpmLock.test.js +43 -0
  64. package/dist/readPnpmLock.test.js.map +1 -0
  65. package/package.json +4 -3
  66. package/src/applyClusterFixes.test.ts +398 -36
  67. package/src/applyClusterFixes.ts +178 -125
  68. package/src/bin/pnpm-why-duplicate.test.ts +31 -8
  69. package/src/dedupe.ts +22 -7
  70. package/src/dedupeCheckConsistency.test.ts +84 -100
  71. package/src/dedupeEndToEnd.test.ts +84 -77
  72. package/src/dedupePeers.test.ts +1 -1
  73. package/src/displayMany.test.ts +4 -4
  74. package/src/helpers/buildIdentifiedFixesMap.test.ts +1 -1
  75. package/src/helpers/buildPnpmPackagesMap.test.ts +1 -1
  76. package/src/helpers/collectDependentRanges.test.ts +1 -1
  77. package/src/helpers/collectPnpmDependents.test.ts +1 -1
  78. package/src/helpers/describeUnheldOverride.test.ts +100 -0
  79. package/src/helpers/describeUnheldOverride.ts +53 -0
  80. package/src/helpers/parsePnpmLockPackages.test.ts +1 -1
  81. package/src/helpers/pnpmWorkspaceYaml.test.ts +2 -5
  82. package/src/helpers/pnpmWorkspaceYaml.ts +5 -20
  83. package/src/helpers/readInstalledManifest.test.ts +1 -1
  84. package/src/helpers/toLockstepGraph.test.ts +1 -1
  85. package/src/identifyClusterFixes.test.ts +27 -58
  86. package/src/identifyResolutionFixes.test.ts +8 -7
  87. package/src/pnpmLockTypes.ts +1 -0
  88. package/src/readPnpmLock.test.ts +65 -0
  89. package/src/readPnpmLock.ts +26 -2
package/README.md CHANGED
@@ -154,11 +154,21 @@ The cluster pass edits workspace `package.json` ranges and adds overrides to
154
154
  `pnpm-workspace.yaml`, then re-resolves without them: overrides are scaffolding,
155
155
  and a fix that holds on its own has them removed again.
156
156
 
157
- When a fix does _not_ hold — `pnpm dedupe` resolves the duplicate straight back
158
- once the override is gone — the override stays, with a comment above it saying
159
- so and pointing at the issue tracker, and the run reports how many were left.
160
- That is the one case where this tool leaves something standing in your
161
- configuration; it is a workaround, and the cluster is worth reporting.
157
+ Nothing is ever left standing in your configuration. When some overrides do not
158
+ hold, the run starts over from before the overrides with only those that did,
159
+ so a merge that holds is kept without dragging along the edges the others moved
160
+ for nothing. Each package left unmerged is reported with the edges that keep it
161
+ apart, in two groups: _not merged even with an override_ (a declared range
162
+ rejects the version) and _pnpm resolves these back without an override_.
163
+
164
+ An open range that resolved past the version the workspace pins (`"*"` on 0.87.0
165
+ beside a pinned 0.84.5) is reported by `pnpm-why-duplicate` but never planned:
166
+ pnpm resolves an open range to the highest copy still in the tree, so pointing
167
+ it at the pinned one only lasts as long as an override.
168
+
169
+ pnpm-dedup 2.2 kept such overrides under an `# Added by pnpm-dedup.` comment.
170
+ They still apply on every resolution, so a run that finds them says so: remove
171
+ them and run again to see what holds on its own.
162
172
 
163
173
  Convergence overrides (`"pkg@": "1.2.3"`, an empty range selector) are what make
164
174
  this safe: they rewrite an edge only when the declared range accepts that exact
@@ -1,7 +1,9 @@
1
1
  import { readFileSync, writeFileSync } from "node:fs";
2
2
  import { join, relative } from "node:path";
3
- import { applyWorkspaceRangeEdit, captureFiles, createPackageFilter, describeSkippedClusterFix, diffDuplicates, partitionUnconditionalOverrides, planClusterApply, renderApplyPlan, restoreFiles, selectClusterFixes, shouldColorize, } from "pm-dedup-core";
3
+ import { applyWorkspaceRangeEdit, captureFiles, createPackageFilter, describeSkippedClusterFix, diffDuplicates, heldOverrides, outstandingOverrides, partitionUnconditionalOverrides, planClusterApply, renderApplyPlan, restoreFiles, reuseKeys, selectClusterFixes, shouldColorize, } from "pm-dedup-core";
4
4
  import { buildPnpmPackagesMap } from "./helpers/buildPnpmPackagesMap.js";
5
+ import { collectDependentRanges } from "./helpers/collectDependentRanges.js";
6
+ import { describeUnheldOverride } from "./helpers/describeUnheldOverride.js";
5
7
  import { readDuplicateSnapshot } from "./helpers/duplicateSnapshot.js";
6
8
  import { parsePnpmLockPackages } from "./helpers/parsePnpmLockPackages.js";
7
9
  import { convergenceOverridesMinVersion, readPnpmVersion, supportsConvergenceOverrides, } from "./helpers/pnpmVersion.js";
@@ -9,6 +11,7 @@ import { addOverrides, overrideKey } from "./helpers/pnpmWorkspaceYaml.js";
9
11
  import { lockPathOf } from "./helpers/projectDir.js";
10
12
  import { createManifestReader } from "./helpers/readInstalledManifest.js";
11
13
  import { runPnpm } from "./helpers/runPnpm.js";
14
+ import { readVersionsSnapshot } from "./helpers/versionsSnapshot.js";
12
15
  import { identifyClusterFixes } from "./identifyClusterFixes.js";
13
16
  import { readPnpmLock } from "./readPnpmLock.js";
14
17
  const issuesUrl = "https://github.com/christophehurpeau/pm-tools/issues";
@@ -18,27 +21,17 @@ const defaultReadFixes = (projectDir) => {
18
21
  };
19
22
  const manifestPathOf = (projectDir, importerPath) => join(projectDir, importerPath === "." ? "" : importerPath, "package.json");
20
23
  const describeOverride = (override, convergence) => `"${overrideKey(override.packageName, convergence)}": "${override.version}"`;
21
- /**
22
- * Why the overrides below them had to stay. Used verbatim as the comment left in
23
- * `pnpm-workspace.yaml` and as the console explanation, so the file and the run
24
- * say the same thing. The packages are the entries that follow, so they are not
25
- * repeated here.
26
- */
27
- const stickyOverrideReason = [
28
- "Added by pnpm-dedup.",
29
- "Removing these makes `pnpm dedupe` resolve them back to a duplicate, so they",
30
- "are what holds the deduplicated result. Keeping them is a workaround: no fix",
31
- "was found that survives on its own. Please report this cluster so it can be",
32
- `handled without a standing override: ${issuesUrl}`,
33
- ];
34
- const reuseKeys = (fixes) => new Set(fixes.flatMap((fix) => fix.reuseFixes.map((reuse) => `${reuse.requesterName}>${reuse.packageName}@${reuse.to}`)));
24
+ const defaultReadDependentRanges = (projectDir, packageNames) => collectDependentRanges(readPnpmLock(lockPathOf(projectDir)), packageNames, createManifestReader(projectDir));
25
+ // Each round only drops overrides, so this bounds a run that keeps losing one to
26
+ // a companion it held alongside.
27
+ const maxOverrideRounds = 3;
35
28
  export const applyClusterFixes = ({ projectDir, dryRun = false, log = console.log,
36
29
  // `pnpm dedupe`, not `pnpm install`: an override is applied by a read-package
37
30
  // hook that only runs during a real resolution, and an incremental install
38
31
  // reports "Already up to date" without ever re-reading a manifest. `dedupe`
39
32
  // re-resolves, and is also what runs right after this, so it is the only
40
33
  // honest thing to verify against.
41
- resolve = () => runPnpm(["dedupe"], { cwd: projectDir }).status, readFixes = defaultReadFixes, readDuplicates = readDuplicateSnapshot, pnpmVersion = () => readPnpmVersion(), convergenceOverrides = true, filter, packageManagerResiduals, color = shouldColorize(), }) => {
34
+ resolve = () => runPnpm(["dedupe"], { cwd: projectDir }).status, readFixes = defaultReadFixes, readDuplicates = readDuplicateSnapshot, readVersions = readVersionsSnapshot, readDependentRanges = defaultReadDependentRanges, pnpmVersion = () => readPnpmVersion(), convergenceOverrides = true, filter, packageManagerResiduals, color = shouldColorize(), }) => {
42
35
  const packageFilter = createPackageFilter(filter);
43
36
  const readSelectedFixes = (dir) => selectClusterFixes(readFixes(dir), packageFilter);
44
37
  const lockPath = lockPathOf(projectDir);
@@ -52,7 +45,10 @@ resolve = () => runPnpm(["dedupe"], { cwd: projectDir }).status, readFixes = def
52
45
  plannedChangeCount,
53
46
  });
54
47
  const { selected: fixes, skipped: filteredOut } = readSelectedFixes(projectDir);
55
- const plan = planClusterApply(fixes);
48
+ // pnpm resolves an open range to the highest copy still in the tree, so a
49
+ // reuse of the pinned version comes apart as soon as its override is removed.
50
+ // The report still names those ranges; the plan does not chase them.
51
+ const plan = planClusterApply(fixes, { reuse: false });
56
52
  const skipped = [
57
53
  ...filteredOut.map(describeSkippedClusterFix),
58
54
  ...plan.unresolvableChanges.map((unresolvable) => `${unresolvable}: no workspace file recorded for it`),
@@ -147,6 +143,7 @@ resolve = () => runPnpm(["dedupe"], { cwd: projectDir }).status, readFixes = def
147
143
  // gone from its output once the edge points at the anchored version.
148
144
  const readState = () => ({
149
145
  duplicates: readDuplicates(lockPath),
146
+ versions: readVersions(lockPath),
150
147
  reuses: reuseKeys(readSelectedFixes(projectDir).selected),
151
148
  });
152
149
  // A step keeps its edits as long as it broke nothing: a widened range often
@@ -178,75 +175,101 @@ resolve = () => runPnpm(["dedupe"], { cwd: projectDir }).status, readFixes = def
178
175
  const withoutOverridesSnapshot = captureFiles(touchedPaths);
179
176
  const workspaceYamlBefore = withoutOverridesSnapshot.find((snapshot) => snapshot.path === workspaceYamlPath);
180
177
  const remaining = readState();
181
- // An override is still worth writing while its package is duplicated, or
182
- // while the edge it repoints is still resolving elsewhere.
183
- const outstanding = plannedOverrides.filter((override) => [...remaining.duplicates].some((resolution) => resolution.startsWith(`${override.packageName}@`)) ||
184
- [...remaining.reuses].some((key) => key.endsWith(`>${override.packageName}@${override.version}`)));
178
+ const outstanding = outstandingOverrides(plannedOverrides, remaining);
179
+ const keptOutcome = (after, stickyOverrides) => ({
180
+ status: "applied",
181
+ before,
182
+ after,
183
+ stickyOverrides,
184
+ plannedChangeCount: changeCount,
185
+ });
185
186
  if (outstanding.length === 0) {
186
- return {
187
- status: "applied",
188
- before,
189
- after: remaining.duplicates,
190
- stickyOverrides: [],
191
- plannedChangeCount: changeCount,
192
- };
193
- }
194
- log(`Adding ${convergenceOverrides ? "convergence" : "plain"} overrides to pnpm-workspace.yaml:`);
195
- for (const override of outstanding) {
196
- log(` ${describeOverride(override, convergenceOverrides)} (${override.reason})`);
197
- }
198
- writeFileSync(workspaceYamlPath, addOverrides(workspaceYamlBefore.content, new Map(outstanding.map((override) => [override.packageName, override.version])), { convergence: convergenceOverrides }));
199
- const withOverrides = resolveAndCheck("the overrides");
200
- if (withOverrides === null) {
201
- revertTo(withoutOverridesSnapshot);
202
- return unchanged("reverted", changeCount);
187
+ return keptOutcome(remaining.duplicates, []);
203
188
  }
204
- // Overrides are scaffolding first: if pnpm holds the result without them they
205
- // are removed, and if it does not they go back with the reason recorded.
206
- log("Removing the overrides and re-resolving to check the result holds:");
207
- restoreFiles([workspaceYamlBefore]);
208
- if (resolve() !== 0) {
209
- log(" `pnpm dedupe` failed without the overrides — reverting");
189
+ // The range edits already held on their own, so dropping the overrides keeps
190
+ // them: only a run that made none of those has nothing left to show.
191
+ const withoutOverrides = (stickyOverrides) => {
210
192
  revertTo(withoutOverridesSnapshot);
211
- return unchanged("reverted", changeCount);
212
- }
213
- const after = readState();
214
- const returnedDuplicates = diffDuplicates(withOverrides.duplicates, after.duplicates).added;
215
- const returnedReuses = [...after.reuses].filter((key) => !withOverrides.reuses.has(key));
216
- if (returnedDuplicates.length > 0 || returnedReuses.length > 0) {
217
- writeFileSync(workspaceYamlPath, addOverrides(workspaceYamlBefore.content, new Map(outstanding.map((override) => [
218
- override.packageName,
219
- override.version,
220
- ])), {
221
- convergence: convergenceOverrides,
222
- comment: stickyOverrideReason.join("\n"),
223
- }));
224
- if (resolve() !== 0) {
225
- log(" `pnpm dedupe` failed with the overrides back — reverting");
226
- revertTo(withoutOverridesSnapshot);
227
- return unchanged("reverted", changeCount);
193
+ return plan.manifestEdits.length > 0
194
+ ? keptOutcome(readDuplicates(lockPath), stickyOverrides)
195
+ : { ...unchanged("reverted", changeCount), stickyOverrides };
196
+ };
197
+ const heldIn = (overrides, end) => heldOverrides(overrides, { start: remaining, end });
198
+ // Overrides are scaffolding: they are written, pnpm resolves with them, and
199
+ // what counts is what is still there once they are removed again.
200
+ const overrideRound = (overrides) => {
201
+ log(`Adding ${convergenceOverrides ? "convergence" : "plain"} overrides to pnpm-workspace.yaml:`);
202
+ for (const override of overrides) {
203
+ log(` ${describeOverride(override, convergenceOverrides)} (${override.reason})`);
228
204
  }
229
- log(` Kept in ${workspaceYamlPath}, with the same explanation as a comment:`);
230
- for (const override of outstanding) {
231
- log(` ${describeOverride(override, convergenceOverrides)}`);
205
+ writeFileSync(workspaceYamlPath, addOverrides(workspaceYamlBefore.content, new Map(overrides.map((override) => [override.packageName, override.version])), { convergence: convergenceOverrides }));
206
+ const withOverrides = resolveAndCheck("the overrides");
207
+ if (withOverrides === null)
208
+ return null;
209
+ const heldWith = heldIn(overrides, withOverrides);
210
+ log("Removing the overrides and re-resolving to check the result holds:");
211
+ restoreFiles([workspaceYamlBefore]);
212
+ const after = resolveAndCheck("removing the overrides");
213
+ if (after === null)
214
+ return null;
215
+ return { heldWith, heldAfter: heldIn(overrides, after), after };
216
+ };
217
+ // A member nothing duplicates only moves for its family's sake, so the
218
+ // family's duplicated members already say what did not merge.
219
+ const reportDropped = (dropped) => {
220
+ const reported = dropped.filter(({ override }) => [...remaining.duplicates].some((resolution) => resolution.startsWith(`${override.packageName}@`)));
221
+ if (reported.length === 0)
222
+ return;
223
+ const ranges = readDependentRanges(projectDir, new Set(reported.map(({ override }) => override.packageName)));
224
+ const logGroup = (title, entries) => {
225
+ if (entries.length === 0)
226
+ return;
227
+ log(title);
228
+ for (const { override } of entries) {
229
+ log(` ${override.packageName} onto ${override.version}:`);
230
+ for (const line of describeUnheldOverride(override, ranges.get(override.packageName) ?? [])) {
231
+ log(` ${line}`);
232
+ }
233
+ }
234
+ };
235
+ logGroup("Not merged even with an override:", reported.filter((entry) => !entry.heldWithOverrides));
236
+ logGroup("pnpm resolves these back without an override, so they are not merged:", reported.filter((entry) => entry.heldWithOverrides));
237
+ log(`No override is left behind. If one of these should merge, please report it at ${issuesUrl}`);
238
+ };
239
+ const dropped = [];
240
+ let candidates = outstanding;
241
+ for (let round = 1; round <= maxOverrideRounds; round++) {
242
+ if (round > 1) {
243
+ log("Retrying with only the overrides that held:");
244
+ restoreFiles(withoutOverridesSnapshot);
232
245
  }
233
- for (const line of stickyOverrideReason) {
234
- log(` ${line}`);
246
+ const result = overrideRound(candidates);
247
+ if (result === null)
248
+ return withoutOverrides([]);
249
+ const { heldWith, heldAfter, after } = result;
250
+ for (const override of candidates) {
251
+ if (!heldAfter.includes(override)) {
252
+ dropped.push({
253
+ override,
254
+ heldWithOverrides: heldWith.includes(override),
255
+ });
256
+ }
235
257
  }
236
- return {
237
- status: "kept-overrides",
238
- before,
239
- after: readDuplicates(lockPath),
240
- stickyOverrides: outstanding,
241
- plannedChangeCount: changeCount,
242
- };
258
+ if (heldAfter.length === candidates.length) {
259
+ reportDropped(dropped);
260
+ return keptOutcome(after.duplicates, dropped.map(({ override }) => override));
261
+ }
262
+ candidates = heldAfter;
263
+ if (candidates.length === 0)
264
+ break;
243
265
  }
244
- return {
245
- status: "applied",
246
- before,
247
- after: after.duplicates,
248
- stickyOverrides: [],
249
- plannedChangeCount: changeCount,
250
- };
266
+ log(candidates.length === 0
267
+ ? " No override holds on its own — reverting them"
268
+ : ` Overrides still came apart after ${maxOverrideRounds} rounds — reverting them`);
269
+ // what is left only held alongside overrides the last round dropped
270
+ dropped.push(...candidates.map((override) => ({ override, heldWithOverrides: true })));
271
+ const outcome = withoutOverrides(dropped.map(({ override }) => override));
272
+ reportDropped(dropped);
273
+ return outcome;
251
274
  };
252
275
  //# sourceMappingURL=applyClusterFixes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"applyClusterFixes.js","sourceRoot":"","sources":["../src/applyClusterFixes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"applyClusterFixes.js","sourceRoot":"","sources":["../src/applyClusterFixes.ts"],"names":[],"mappings":"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"}