@pnpm/hooks.read-package-hook 1100.0.8 → 1100.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,592 @@
1
+ # @pnpm/hooks.read-package-hook
2
+
3
+ ## 1100.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Added a new override selector form with an empty range — `"pkg@": "<version>"` — called a convergence override. It rewrites a dependency edge only when its exact version satisfies the edge's declared range, so compatible consumers converge on one version while incompatible consumers keep their own resolution — now and for any dependent added in the future [#12794](https://github.com/pnpm/pnpm/issues/12794).
8
+
9
+ ```yaml
10
+ overrides:
11
+ "form-data@": 4.0.6
12
+ ```
13
+
14
+ The value must be an exact version. When a full resolution detects that every declared range also admits a newer version, pnpm warns that the override is stale and names the version to converge on. Previously an empty range in an override selector was undocumented and behaved like a bare (unscoped) override.
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies:
19
+ - @pnpm/config.parse-overrides@1100.1.0
20
+ - @pnpm/types@1101.4.0
21
+
22
+ ## 1100.0.9
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies [852d537]
27
+ - @pnpm/error@1100.0.1
28
+ - @pnpm/config.parse-overrides@1100.0.2
29
+
30
+ ## 1100.0.8
31
+
32
+ ### Patch Changes
33
+
34
+ - a31faa7: Updated dependency ranges. Notably:
35
+
36
+ - `@pnpm/logger` peer dependency range moved to `^1100.0.0`.
37
+ - `msgpackr` 1.11.8 → 2.0.4 (store index files remain byte-compatible in both directions).
38
+ - `open` ^7.4.2 → ^11.0.0, `memoize` ^10 → ^11, `cli-truncate` ^5 → ^6, `pidtree` ^0.6 → ^1.
39
+ - `@yarnpkg/core` 4.5.0 → 4.8.0, `@rushstack/worker-pool` 0.7.7 → 0.7.18, `@cyclonedx/cyclonedx-library` 10.0.0 → 10.1.0, `@pnpm/config.nerf-dart` ^1 → ^2, `@pnpm/log.group` 3.0.2 → 4.0.1, `@pnpm/util.lex-comparator` ^3 → ^4.
40
+
41
+ - Updated dependencies [681b593]
42
+ - Updated dependencies [a31faa7]
43
+ - @pnpm/types@1101.3.2
44
+ - @pnpm/deps.peer-range@1100.0.2
45
+
46
+ ## 1100.0.7
47
+
48
+ ### Patch Changes
49
+
50
+ - Updated dependencies [bf1b731]
51
+ - @pnpm/types@1101.3.1
52
+
53
+ ## 1100.0.6
54
+
55
+ ### Patch Changes
56
+
57
+ - Updated dependencies [a017bf3]
58
+ - @pnpm/types@1101.3.0
59
+
60
+ ## 1100.0.5
61
+
62
+ ### Patch Changes
63
+
64
+ - Updated dependencies [35d2355]
65
+ - @pnpm/types@1101.2.0
66
+
67
+ ## 1100.0.4
68
+
69
+ ### Patch Changes
70
+
71
+ - Updated dependencies [64afc92]
72
+ - @pnpm/types@1101.1.1
73
+
74
+ ## 1100.0.3
75
+
76
+ ### Patch Changes
77
+
78
+ - Updated dependencies [b61e268]
79
+ - @pnpm/types@1101.1.0
80
+
81
+ ## 1100.0.2
82
+
83
+ ### Patch Changes
84
+
85
+ - Updated dependencies [184ce26]
86
+ - @pnpm/resolving.parse-wanted-dependency@1100.0.1
87
+ - @pnpm/config.parse-overrides@1100.0.1
88
+ - @pnpm/deps.peer-range@1100.0.1
89
+ - @pnpm/config.matcher@1100.0.1
90
+
91
+ ## 1100.0.1
92
+
93
+ ### Patch Changes
94
+
95
+ - Updated dependencies [ff28085]
96
+ - @pnpm/types@1101.0.0
97
+
98
+ ## 1001.0.0
99
+
100
+ ### Major Changes
101
+
102
+ - 491a84f: This package is now pure ESM.
103
+ - 7d2fd48: Node.js v18, 19, 20, and 21 support discontinued.
104
+
105
+ ### Patch Changes
106
+
107
+ - Updated dependencies [76718b3]
108
+ - Updated dependencies [a8f016c]
109
+ - Updated dependencies [cc1b8e3]
110
+ - Updated dependencies [491a84f]
111
+ - Updated dependencies [7d2fd48]
112
+ - Updated dependencies [efb48dc]
113
+ - Updated dependencies [cb367b9]
114
+ - Updated dependencies [7b1c189]
115
+ - Updated dependencies [8ffb1a7]
116
+ - Updated dependencies [05fb1ae]
117
+ - Updated dependencies [71de2b3]
118
+ - Updated dependencies [10bc391]
119
+ - Updated dependencies [831f574]
120
+ - Updated dependencies [2df8b71]
121
+ - Updated dependencies [15549a9]
122
+ - Updated dependencies [cc7c0d2]
123
+ - Updated dependencies [efb48dc]
124
+ - @pnpm/types@1001.0.0
125
+ - @pnpm/resolving.parse-wanted-dependency@1002.0.0
126
+ - @pnpm/config.parse-overrides@1002.0.0
127
+ - @pnpm/deps.peer-range@1001.0.0
128
+ - @pnpm/config.matcher@1001.0.0
129
+ - @pnpm/error@1001.0.0
130
+
131
+ ## 1000.0.15
132
+
133
+ ### Patch Changes
134
+
135
+ - Updated dependencies [7c1382f]
136
+ - Updated dependencies [dee39ec]
137
+ - Updated dependencies [7c1382f]
138
+ - @pnpm/types@1000.9.0
139
+ - @pnpm/matcher@1000.1.0
140
+
141
+ ## 1000.0.14
142
+
143
+ ### Patch Changes
144
+
145
+ - @pnpm/error@1000.0.5
146
+ - @pnpm/parse-overrides@1001.0.3
147
+
148
+ ## 1000.0.13
149
+
150
+ ### Patch Changes
151
+
152
+ - Updated dependencies [e792927]
153
+ - @pnpm/types@1000.8.0
154
+
155
+ ## 1000.0.12
156
+
157
+ ### Patch Changes
158
+
159
+ - @pnpm/error@1000.0.4
160
+ - @pnpm/parse-overrides@1001.0.2
161
+
162
+ ## 1000.0.11
163
+
164
+ ### Patch Changes
165
+
166
+ - Updated dependencies [1a07b8f]
167
+ - @pnpm/types@1000.7.0
168
+ - @pnpm/error@1000.0.3
169
+ - @pnpm/parse-overrides@1001.0.1
170
+
171
+ ## 1000.0.10
172
+
173
+ ### Patch Changes
174
+
175
+ - Updated dependencies [5ec7255]
176
+ - @pnpm/types@1000.6.0
177
+
178
+ ## 1000.0.9
179
+
180
+ ### Patch Changes
181
+
182
+ - Updated dependencies [8a9f3a4]
183
+ - Updated dependencies [5b73df1]
184
+ - @pnpm/parse-wanted-dependency@1001.0.0
185
+ - @pnpm/parse-overrides@1001.0.0
186
+ - @pnpm/types@1000.5.0
187
+
188
+ ## 1000.0.8
189
+
190
+ ### Patch Changes
191
+
192
+ - Updated dependencies [750ae7d]
193
+ - @pnpm/types@1000.4.0
194
+
195
+ ## 1000.0.7
196
+
197
+ ### Patch Changes
198
+
199
+ - Updated dependencies [5f7be64]
200
+ - Updated dependencies [5f7be64]
201
+ - @pnpm/types@1000.3.0
202
+
203
+ ## 1000.0.6
204
+
205
+ ### Patch Changes
206
+
207
+ - Updated dependencies [a5e4965]
208
+ - @pnpm/types@1000.2.1
209
+
210
+ ## 1000.0.5
211
+
212
+ ### Patch Changes
213
+
214
+ - Updated dependencies [8fcc221]
215
+ - @pnpm/types@1000.2.0
216
+
217
+ ## 1000.0.4
218
+
219
+ ### Patch Changes
220
+
221
+ - e8c2b17: Prevent `overrides` from adding invalid version ranges to `peerDependencies` by keeping the `peerDependencies` and overriding them with prod `dependencies` [#8978](https://github.com/pnpm/pnpm/issues/8978).
222
+ - Updated dependencies [e8c2b17]
223
+ - @pnpm/semver.peer-range@1000.0.0
224
+
225
+ ## 1000.0.3
226
+
227
+ ### Patch Changes
228
+
229
+ - Updated dependencies [b562deb]
230
+ - @pnpm/types@1000.1.1
231
+ - @pnpm/error@1000.0.2
232
+ - @pnpm/parse-overrides@1000.0.2
233
+
234
+ ## 1000.0.2
235
+
236
+ ### Patch Changes
237
+
238
+ - Updated dependencies [9591a18]
239
+ - @pnpm/types@1000.1.0
240
+
241
+ ## 1000.0.1
242
+
243
+ ### Patch Changes
244
+
245
+ - @pnpm/error@1000.0.1
246
+ - @pnpm/parse-overrides@1000.0.1
247
+
248
+ ## 6.0.0
249
+
250
+ ### Major Changes
251
+
252
+ - 7fb4371: Update the compatibility database (`@yarnpkg/extensions` to v2.0.3). This might change your lockfile.
253
+
254
+ ### Patch Changes
255
+
256
+ - @pnpm/error@6.0.3
257
+ - @pnpm/parse-overrides@5.1.2
258
+
259
+ ## 5.1.0
260
+
261
+ ### Minor Changes
262
+
263
+ - b7fb704: Added the ability for `overrides` to remove dependencies by specifying `"-"` as the field value [#8572](https://github.com/pnpm/pnpm/issues/8572). For example, to remove `lodash` from the dependencies, use this configuration in `package.json`:
264
+
265
+ ```json
266
+ {
267
+ "pnpm": {
268
+ "overrides": {
269
+ "lodash": "-"
270
+ }
271
+ }
272
+ }
273
+ ```
274
+
275
+ ### Patch Changes
276
+
277
+ - @pnpm/error@6.0.2
278
+ - @pnpm/parse-overrides@5.1.1
279
+
280
+ ## 5.0.3
281
+
282
+ ### Patch Changes
283
+
284
+ - Updated dependencies [d500d9f]
285
+ - @pnpm/types@12.2.0
286
+
287
+ ## 5.0.2
288
+
289
+ ### Patch Changes
290
+
291
+ - Updated dependencies [7ee59a1]
292
+ - @pnpm/types@12.1.0
293
+
294
+ ## 5.0.1
295
+
296
+ ### Patch Changes
297
+
298
+ - Updated dependencies [cb006df]
299
+ - @pnpm/types@12.0.0
300
+
301
+ ## 5.0.0
302
+
303
+ ### Major Changes
304
+
305
+ - 0f0e441: Overrides now support catalogs [#8303](https://github.com/pnpm/pnpm/issues/8303).
306
+
307
+ ### Patch Changes
308
+
309
+ - Updated dependencies [0f0e441]
310
+ - Updated dependencies [0ef168b]
311
+ - @pnpm/parse-overrides@5.1.0
312
+ - @pnpm/types@11.1.0
313
+
314
+ ## 4.0.5
315
+
316
+ ### Patch Changes
317
+
318
+ - Updated dependencies [dd00eeb]
319
+ - Updated dependencies
320
+ - @pnpm/types@11.0.0
321
+
322
+ ## 4.0.4
323
+
324
+ ### Patch Changes
325
+
326
+ - Updated dependencies [13e55b2]
327
+ - @pnpm/types@10.1.1
328
+
329
+ ## 4.0.3
330
+
331
+ ### Patch Changes
332
+
333
+ - Updated dependencies [45f4262]
334
+ - @pnpm/types@10.1.0
335
+
336
+ ## 4.0.2
337
+
338
+ ### Patch Changes
339
+
340
+ - b1d7f8c: Overrides with `link:` now preserves absolute path.
341
+ - b1d7f8c: Fix incorrect path when resolving relative `file:` overrides for workspace package.
342
+ - Updated dependencies [a7aef51]
343
+ - @pnpm/error@6.0.1
344
+ - @pnpm/parse-overrides@5.0.1
345
+
346
+ ## 4.0.1
347
+
348
+ ### Patch Changes
349
+
350
+ - 04310be: Write overrides with `file:` scheme to lockfile as-is [#7858](https://github.com/pnpm/pnpm/issues/7858).
351
+
352
+ ## 4.0.0
353
+
354
+ ### Major Changes
355
+
356
+ - aa33269: Peer dependency rules should only affect reporting, not data in the lockfile.
357
+ - 43cdd87: Node.js v16 support dropped. Use at least Node.js v18.12.
358
+
359
+ ### Minor Changes
360
+
361
+ - 730929e: Add a field named `ignoredOptionalDependencies`. This is an array of strings. If an optional dependency has its name included in this array, it will be skipped.
362
+
363
+ ### Patch Changes
364
+
365
+ - 0963390: Link overrides should be able to use absolute path [#7749](https://github.com/pnpm/pnpm/pull/7749).
366
+ - Updated dependencies [7733f3a]
367
+ - Updated dependencies [3ded840]
368
+ - Updated dependencies [43cdd87]
369
+ - Updated dependencies [730929e]
370
+ - @pnpm/types@10.0.0
371
+ - @pnpm/error@6.0.0
372
+ - @pnpm/parse-wanted-dependency@6.0.0
373
+ - @pnpm/parse-overrides@5.0.0
374
+ - @pnpm/matcher@6.0.0
375
+
376
+ ## 3.0.10
377
+
378
+ ### Patch Changes
379
+
380
+ - Updated dependencies [4d34684f1]
381
+ - @pnpm/types@9.4.2
382
+
383
+ ## 3.0.9
384
+
385
+ ### Patch Changes
386
+
387
+ - Updated dependencies
388
+ - @pnpm/types@9.4.1
389
+
390
+ ## 3.0.8
391
+
392
+ ### Patch Changes
393
+
394
+ - Updated dependencies [43ce9e4a6]
395
+ - @pnpm/types@9.4.0
396
+
397
+ ## 3.0.7
398
+
399
+ ### Patch Changes
400
+
401
+ - Updated dependencies [d774a3196]
402
+ - @pnpm/types@9.3.0
403
+
404
+ ## 3.0.6
405
+
406
+ ### Patch Changes
407
+
408
+ - 64bf3c860: Override peerDependencies in `pnpm.overrides` [#6759](https://github.com/pnpm/pnpm/issues/6759).
409
+
410
+ ## 3.0.5
411
+
412
+ ### Patch Changes
413
+
414
+ - ec50dc98c: Compare overriding ranges with intersection instead of subset to fix override range bug [#6878](https://github.com/pnpm/pnpm/issues/6878).
415
+
416
+ ## 3.0.4
417
+
418
+ ### Patch Changes
419
+
420
+ - Updated dependencies [aa2ae8fe2]
421
+ - @pnpm/types@9.2.0
422
+
423
+ ## 3.0.3
424
+
425
+ ### Patch Changes
426
+
427
+ - @pnpm/error@5.0.2
428
+ - @pnpm/parse-overrides@4.0.2
429
+
430
+ ## 3.0.2
431
+
432
+ ### Patch Changes
433
+
434
+ - Updated dependencies [a9e0b7cbf]
435
+ - @pnpm/types@9.1.0
436
+ - @pnpm/error@5.0.1
437
+ - @pnpm/parse-overrides@4.0.1
438
+
439
+ ## 3.0.1
440
+
441
+ ### Patch Changes
442
+
443
+ - c0760128d: bump semver to 7.4.0
444
+
445
+ ## 3.0.0
446
+
447
+ ### Major Changes
448
+
449
+ - eceaa8b8b: Node.js 14 support dropped.
450
+
451
+ ### Patch Changes
452
+
453
+ - df107f2ef: Should use most specific override rule when multiple rules match the same target [#6210](https://github.com/pnpm/pnpm/issues/6210).
454
+ - 0a8b48f04: Update the compatibility DB.
455
+ - Updated dependencies [eceaa8b8b]
456
+ - @pnpm/parse-wanted-dependency@5.0.0
457
+ - @pnpm/parse-overrides@4.0.0
458
+ - @pnpm/matcher@5.0.0
459
+ - @pnpm/error@5.0.0
460
+ - @pnpm/types@9.0.0
461
+
462
+ ## 2.1.1
463
+
464
+ ### Patch Changes
465
+
466
+ - d583fbb2a: Fixed issue where allowedVersions wouldn't apply correctly if only parent>child selectors were used
467
+
468
+ ## 2.1.0
469
+
470
+ ### Minor Changes
471
+
472
+ - f39d608ac: Extends the `pnpm.peerDependencyRules.allowedVersions` `package.json` option to support the `parent>child` selector syntax. This syntax allows for extending specific `peerDependencies` [#6108](https://github.com/pnpm/pnpm/pull/6108).
473
+
474
+ ## 2.0.12
475
+
476
+ ### Patch Changes
477
+
478
+ - 308eb2c9b: Use Map rather than Object in `createPackageExtender` to prevent read the prototype property to native function
479
+
480
+ ## 2.0.11
481
+
482
+ ### Patch Changes
483
+
484
+ - Updated dependencies [2ae1c449d]
485
+ - @pnpm/parse-wanted-dependency@4.1.0
486
+ - @pnpm/parse-overrides@3.0.3
487
+
488
+ ## 2.0.10
489
+
490
+ ### Patch Changes
491
+
492
+ - @pnpm/parse-overrides@3.0.2
493
+
494
+ ## 2.0.9
495
+
496
+ ### Patch Changes
497
+
498
+ - Updated dependencies [b77651d14]
499
+ - @pnpm/types@8.10.0
500
+
501
+ ## 2.0.8
502
+
503
+ ### Patch Changes
504
+
505
+ - b11a8c363: It should be possible to use overrides with absolute file paths [#5754](https://github.com/pnpm/pnpm/issues/5754).
506
+
507
+ ## 2.0.7
508
+
509
+ ### Patch Changes
510
+
511
+ - 924eca293: It should be possible to override a dependency with a local package using relative path from the workspace root directory [#5493](https://github.com/pnpm/pnpm/issues/5493).
512
+ - Updated dependencies [a9d59d8bc]
513
+ - @pnpm/parse-wanted-dependency@4.0.1
514
+ - @pnpm/parse-overrides@3.0.1
515
+
516
+ ## 2.0.6
517
+
518
+ ### Patch Changes
519
+
520
+ - Updated dependencies [969f8a002]
521
+ - @pnpm/matcher@4.0.1
522
+
523
+ ## 2.0.5
524
+
525
+ ### Patch Changes
526
+
527
+ - Updated dependencies [702e847c1]
528
+ - @pnpm/types@8.9.0
529
+
530
+ ## 2.0.4
531
+
532
+ ### Patch Changes
533
+
534
+ - 0da2f0412: Update dependencies.
535
+
536
+ ## 2.0.3
537
+
538
+ ### Patch Changes
539
+
540
+ - da22f0c1f: Version overrider should have higher priority then custom read package hook from `.pnpmfile.cjs`.
541
+
542
+ ## 2.0.2
543
+
544
+ ### Patch Changes
545
+
546
+ - 0fe927215: The custom hooks should be executed after the peer dependency patcher hook.
547
+
548
+ ## 2.0.1
549
+
550
+ ### Patch Changes
551
+
552
+ - Updated dependencies [844e82f3a]
553
+ - @pnpm/types@8.8.0
554
+
555
+ ## 2.0.0
556
+
557
+ ### Major Changes
558
+
559
+ - f884689e0: Require `@pnpm/logger` v5.
560
+
561
+ ### Patch Changes
562
+
563
+ - Updated dependencies [f884689e0]
564
+ - @pnpm/matcher@4.0.0
565
+ - @pnpm/parse-overrides@3.0.0
566
+ - @pnpm/parse-wanted-dependency@4.0.0
567
+
568
+ ## 1.0.2
569
+
570
+ ### Patch Changes
571
+
572
+ - f4813c487: Update @yarnpkg/extensions.
573
+ - 8c3a0b236: The readPackageHooks should always get the project directory as the second argument.
574
+
575
+ ## 1.0.1
576
+
577
+ ### Patch Changes
578
+
579
+ - @pnpm/parse-overrides@2.0.4
580
+
581
+ ## 1.0.0
582
+
583
+ ### Major Changes
584
+
585
+ - 51566e34b: First release.
586
+
587
+ ### Patch Changes
588
+
589
+ - Updated dependencies [abb41a626]
590
+ - Updated dependencies [d665f3ff7]
591
+ - @pnpm/matcher@3.2.0
592
+ - @pnpm/types@8.7.0
@@ -1,13 +1,14 @@
1
1
  import type { PackageExtension, ReadPackageHook } from '@pnpm/types';
2
- import { type VersionOverrideWithoutRawSelector } from './createVersionsOverrider.js';
2
+ import { type CreateVersionsOverriderOptions, type VersionOverrideWithoutRawSelector } from './createVersionsOverrider.js';
3
3
  export declare function getEffectivePackageExtensions({ ignoreCompatibilityDb, packageExtensions, }: {
4
4
  ignoreCompatibilityDb?: boolean;
5
5
  packageExtensions?: Record<string, PackageExtension>;
6
6
  }): Record<string, PackageExtension> | undefined;
7
- export declare function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, overrides, ignoredOptionalDependencies, packageExtensions, readPackageHook, }: {
7
+ export declare function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, overrides, convergeDeclaredRanges, ignoredOptionalDependencies, packageExtensions, readPackageHook, }: {
8
8
  ignoreCompatibilityDb?: boolean;
9
9
  lockfileDir: string;
10
10
  overrides?: VersionOverrideWithoutRawSelector[];
11
+ convergeDeclaredRanges?: CreateVersionsOverriderOptions['convergeDeclaredRanges'];
11
12
  ignoredOptionalDependencies?: string[];
12
13
  packageExtensions?: Record<string, PackageExtension>;
13
14
  readPackageHook?: ReadPackageHook[] | ReadPackageHook;
@@ -19,7 +19,7 @@ export function getEffectivePackageExtensions({ ignoreCompatibilityDb, packageEx
19
19
  }
20
20
  return isEmpty(effectivePackageExtensions) ? undefined : effectivePackageExtensions;
21
21
  }
22
- export function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, overrides, ignoredOptionalDependencies, packageExtensions, readPackageHook, }) {
22
+ export function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, overrides, convergeDeclaredRanges, ignoredOptionalDependencies, packageExtensions, readPackageHook, }) {
23
23
  const hooks = [];
24
24
  const effectivePackageExtensions = getEffectivePackageExtensions({
25
25
  ignoreCompatibilityDb,
@@ -35,7 +35,7 @@ export function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, over
35
35
  hooks.push(readPackageHook);
36
36
  }
37
37
  if (!isEmpty(overrides ?? {})) {
38
- hooks.push(createVersionsOverrider(overrides, lockfileDir));
38
+ hooks.push(createVersionsOverrider(overrides, lockfileDir, { convergeDeclaredRanges }));
39
39
  }
40
40
  if (ignoredOptionalDependencies && !isEmpty(ignoredOptionalDependencies)) {
41
41
  hooks.push(createOptionalDependenciesRemover(ignoredOptionalDependencies));
@@ -1,4 +1,14 @@
1
1
  import type { VersionOverride as VersionOverrideBase } from '@pnpm/config.parse-overrides';
2
2
  import type { ReadPackageHook } from '@pnpm/types';
3
3
  export type VersionOverrideWithoutRawSelector = Omit<VersionOverrideBase, 'selector'>;
4
- export declare function createVersionsOverrider(overrides: VersionOverrideWithoutRawSelector[], rootDir: string): ReadPackageHook;
4
+ export interface CreateVersionsOverriderOptions {
5
+ /**
6
+ * Populated with every declared semver range seen for packages that have a
7
+ * convergence override, whether or not the override's version satisfied it.
8
+ * Feeds the staleness check for convergence overrides after a full
9
+ * resolution. Edges claimed by an explicit override are not recorded — the
10
+ * convergence override never governs them.
11
+ */
12
+ convergeDeclaredRanges?: Map<string, Set<string>>;
13
+ }
14
+ export declare function createVersionsOverrider(overrides: VersionOverrideWithoutRawSelector[], rootDir: string, opts?: CreateVersionsOverriderOptions): ReadPackageHook;
@@ -4,17 +4,22 @@ import normalizePath from 'normalize-path';
4
4
  import { partition } from 'ramda';
5
5
  import semver from 'semver';
6
6
  import { isIntersectingRange } from './isIntersectingRange.js';
7
- export function createVersionsOverrider(overrides, rootDir) {
8
- const [versionOverrides, genericVersionOverrides] = partition(({ parentPkg }) => parentPkg != null, overrides.map((override) => ({
7
+ export function createVersionsOverrider(overrides, rootDir, opts) {
8
+ const [convergeOverrides, explicitOverrides] = partition(({ converge }) => converge === true, overrides);
9
+ const [versionOverrides, genericVersionOverrides] = partition(({ parentPkg }) => parentPkg != null, explicitOverrides.map((override) => ({
9
10
  ...override,
10
11
  localTarget: createLocalTarget(override, rootDir),
11
12
  })));
13
+ const convergeVersions = new Map(convergeOverrides.map((override) => [override.targetPkg.name, override.newBareSpecifier]));
12
14
  return ((manifest, dir) => {
13
15
  const versionOverridesWithParent = versionOverrides.filter(({ parentPkg }) => {
14
16
  return (parentPkg.name === manifest.name &&
15
17
  (!parentPkg.bareSpecifier || semver.satisfies(manifest.version, parentPkg.bareSpecifier)));
16
18
  });
17
- overrideDepsOfPkg({ manifest, dir }, versionOverridesWithParent, genericVersionOverrides);
19
+ overrideDepsOfPkg({ manifest, dir }, versionOverridesWithParent, genericVersionOverrides, {
20
+ convergeVersions,
21
+ convergeDeclaredRanges: opts?.convergeDeclaredRanges,
22
+ });
18
23
  return manifest;
19
24
  });
20
25
  }
@@ -34,9 +39,9 @@ function createLocalTarget(override, rootDir) {
34
39
  const absolutePath = specifiedViaRelativePath ? path.join(rootDir, pkgPath) : pkgPath;
35
40
  return { absolutePath, specifiedViaRelativePath, protocol };
36
41
  }
37
- function overrideDepsOfPkg({ manifest, dir }, versionOverrides, genericVersionOverrides) {
42
+ function overrideDepsOfPkg({ manifest, dir }, versionOverrides, genericVersionOverrides, convergeOpts) {
38
43
  const { dependencies, optionalDependencies, devDependencies, peerDependencies } = manifest;
39
- const _overrideDeps = overrideDeps.bind(null, { versionOverrides, genericVersionOverrides, dir });
44
+ const _overrideDeps = overrideDeps.bind(null, { versionOverrides, genericVersionOverrides, dir, convergeOpts });
40
45
  for (const deps of [dependencies, optionalDependencies, devDependencies]) {
41
46
  if (deps) {
42
47
  _overrideDeps(deps, undefined);
@@ -48,12 +53,14 @@ function overrideDepsOfPkg({ manifest, dir }, versionOverrides, genericVersionOv
48
53
  _overrideDeps(manifest.dependencies, peerDependencies);
49
54
  }
50
55
  }
51
- function overrideDeps({ versionOverrides, genericVersionOverrides, dir }, deps, peerDeps) {
56
+ function overrideDeps({ versionOverrides, genericVersionOverrides, dir, convergeOpts }, deps, peerDeps) {
52
57
  for (const [name, bareSpecifier] of Object.entries(peerDeps ?? deps)) {
53
58
  const versionOverride = pickMostSpecificVersionOverride(versionOverrides.filter(({ targetPkg }) => targetPkg.name === name && isIntersectingRange(targetPkg.bareSpecifier, bareSpecifier))) ??
54
59
  pickMostSpecificVersionOverride(genericVersionOverrides.filter(({ targetPkg }) => targetPkg.name === name && isIntersectingRange(targetPkg.bareSpecifier, bareSpecifier)));
55
- if (!versionOverride)
60
+ if (!versionOverride) {
61
+ convergeDep(convergeOpts, { deps, peerDeps }, name, bareSpecifier);
56
62
  continue;
63
+ }
57
64
  if (versionOverride.newBareSpecifier === '-') {
58
65
  if (peerDeps) {
59
66
  delete peerDeps[versionOverride.targetPkg.name];
@@ -74,6 +81,34 @@ function overrideDeps({ versionOverrides, genericVersionOverrides, dir }, deps,
74
81
  }
75
82
  }
76
83
  }
84
+ /**
85
+ * A convergence override (`"pkg@": "<version>"`) rewrites a dependency edge
86
+ * only when its version satisfies the edge's declared range, so incompatible
87
+ * consumers keep their own resolution. Only plain semver ranges participate:
88
+ * `workspace:`, `catalog:`, `npm:`, git/URL, and dist-tag specifiers have no
89
+ * defined "satisfies" relation and are left untouched.
90
+ */
91
+ function convergeDep({ convergeVersions, convergeDeclaredRanges }, { deps, peerDeps }, name, bareSpecifier) {
92
+ const convergeVersion = convergeVersions.get(name);
93
+ if (convergeVersion == null || semver.validRange(bareSpecifier, true) == null)
94
+ return;
95
+ if (convergeDeclaredRanges != null) {
96
+ let ranges = convergeDeclaredRanges.get(name);
97
+ if (ranges == null) {
98
+ ranges = new Set();
99
+ convergeDeclaredRanges.set(name, ranges);
100
+ }
101
+ ranges.add(bareSpecifier);
102
+ }
103
+ if (!semver.satisfies(convergeVersion, bareSpecifier, true))
104
+ return;
105
+ if (peerDeps == null) {
106
+ deps[name] = convergeVersion;
107
+ }
108
+ else {
109
+ peerDeps[name] = convergeVersion;
110
+ }
111
+ }
77
112
  function resolveLocalOverride({ specifiedViaRelativePath, absolutePath }, pkgDir) {
78
113
  return specifiedViaRelativePath && pkgDir
79
114
  ? normalizePath(path.relative(pkgDir, absolutePath))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/hooks.read-package-hook",
3
- "version": "1100.0.8",
3
+ "version": "1100.1.0",
4
4
  "description": "Creates the default package reader hook used by pnpm",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -10,9 +10,9 @@
10
10
  "funding": "https://opencollective.com/pnpm",
11
11
  "repository": {
12
12
  "type": "git",
13
- "url": "https://github.com/pnpm/pnpm/tree/main/hooks/read-package-hook"
13
+ "url": "https://github.com/pnpm/pnpm/tree/main/pnpm11/hooks/read-package-hook"
14
14
  },
15
- "homepage": "https://github.com/pnpm/pnpm/tree/main/hooks/read-package-hook#readme",
15
+ "homepage": "https://github.com/pnpm/pnpm/tree/main/pnpm11/hooks/read-package-hook#readme",
16
16
  "bugs": {
17
17
  "url": "https://github.com/pnpm/pnpm/issues"
18
18
  },
@@ -27,24 +27,24 @@
27
27
  "!*.map"
28
28
  ],
29
29
  "dependencies": {
30
+ "@pnpm/config.matcher": "1100.0.1",
31
+ "@pnpm/config.parse-overrides": "1100.1.0",
32
+ "@pnpm/deps.peer-range": "1100.0.2",
33
+ "@pnpm/error": "1100.0.1",
34
+ "@pnpm/resolving.parse-wanted-dependency": "1100.0.1",
35
+ "@pnpm/types": "1101.4.0",
30
36
  "@yarnpkg/extensions": "2.0.6",
31
37
  "normalize-path": "^3.0.0",
32
38
  "ramda": "npm:@pnpm/ramda@0.28.1",
33
- "semver": "^7.8.4",
34
- "@pnpm/config.parse-overrides": "1100.0.1",
35
- "@pnpm/error": "1100.0.0",
36
- "@pnpm/deps.peer-range": "1100.0.2",
37
- "@pnpm/resolving.parse-wanted-dependency": "1100.0.1",
38
- "@pnpm/types": "1101.3.2",
39
- "@pnpm/config.matcher": "1100.0.1"
39
+ "semver": "^7.8.4"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@jest/globals": "30.4.1",
43
+ "@pnpm/hooks.read-package-hook": "1100.1.0",
43
44
  "@types/normalize-path": "^3.0.2",
44
45
  "@types/ramda": "0.31.1",
45
46
  "@types/semver": "7.7.1",
46
- "@yarnpkg/core": "4.8.0",
47
- "@pnpm/hooks.read-package-hook": "1100.0.8"
47
+ "@yarnpkg/core": "4.8.0"
48
48
  },
49
49
  "engines": {
50
50
  "node": ">=22.13"