@pnpm/config.parse-overrides 1100.0.2 → 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,241 @@
1
+ # @pnpm/parse-overrides
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
+ ## 1100.0.2
17
+
18
+ ### Patch Changes
19
+
20
+ - Updated dependencies [852d537]
21
+ - @pnpm/error@1100.0.1
22
+
23
+ ## 1100.0.1
24
+
25
+ ### Patch Changes
26
+
27
+ - 184ce26: Fix the package name in README.md.
28
+ - Updated dependencies [184ce26]
29
+ - @pnpm/resolving.parse-wanted-dependency@1100.0.1
30
+
31
+ ## 1002.0.0
32
+
33
+ ### Major Changes
34
+
35
+ - 491a84f: This package is now pure ESM.
36
+ - 7d2fd48: Node.js v18, 19, 20, and 21 support discontinued.
37
+
38
+ ### Patch Changes
39
+
40
+ - Updated dependencies [491a84f]
41
+ - Updated dependencies [7d2fd48]
42
+ - Updated dependencies [831f574]
43
+ - @pnpm/resolving.parse-wanted-dependency@1002.0.0
44
+ - @pnpm/catalogs.resolver@1001.0.0
45
+ - @pnpm/catalogs.types@1001.0.0
46
+ - @pnpm/error@1001.0.0
47
+
48
+ ## 1001.0.3
49
+
50
+ ### Patch Changes
51
+
52
+ - @pnpm/error@1000.0.5
53
+
54
+ ## 1001.0.2
55
+
56
+ ### Patch Changes
57
+
58
+ - @pnpm/error@1000.0.4
59
+ - @pnpm/catalogs.resolver@1000.0.5
60
+
61
+ ## 1001.0.1
62
+
63
+ ### Patch Changes
64
+
65
+ - @pnpm/error@1000.0.3
66
+ - @pnpm/catalogs.resolver@1000.0.4
67
+
68
+ ## 1001.0.0
69
+
70
+ ### Major Changes
71
+
72
+ - 8a9f3a4: `pref` renamed to `bareSpecifier`.
73
+
74
+ ### Patch Changes
75
+
76
+ - Updated dependencies [8a9f3a4]
77
+ - @pnpm/parse-wanted-dependency@1001.0.0
78
+ - @pnpm/catalogs.resolver@1000.0.3
79
+
80
+ ## 1000.0.2
81
+
82
+ ### Patch Changes
83
+
84
+ - @pnpm/error@1000.0.2
85
+ - @pnpm/catalogs.resolver@1000.0.2
86
+
87
+ ## 1000.0.1
88
+
89
+ ### Patch Changes
90
+
91
+ - @pnpm/error@1000.0.1
92
+ - @pnpm/catalogs.resolver@1000.0.1
93
+
94
+ ## 5.1.2
95
+
96
+ ### Patch Changes
97
+
98
+ - @pnpm/error@6.0.3
99
+ - @pnpm/catalogs.resolver@0.1.2
100
+
101
+ ## 5.1.1
102
+
103
+ ### Patch Changes
104
+
105
+ - @pnpm/error@6.0.2
106
+ - @pnpm/catalogs.resolver@0.1.1
107
+
108
+ ## 5.1.0
109
+
110
+ ### Minor Changes
111
+
112
+ - 0f0e441: Overrides now support catalogs [#8303](https://github.com/pnpm/pnpm/issues/8303).
113
+
114
+ ## 5.0.1
115
+
116
+ ### Patch Changes
117
+
118
+ - Updated dependencies [a7aef51]
119
+ - @pnpm/error@6.0.1
120
+
121
+ ## 5.0.0
122
+
123
+ ### Major Changes
124
+
125
+ - 43cdd87: Node.js v16 support dropped. Use at least Node.js v18.12.
126
+
127
+ ### Patch Changes
128
+
129
+ - Updated dependencies [3ded840]
130
+ - Updated dependencies [43cdd87]
131
+ - @pnpm/error@6.0.0
132
+ - @pnpm/parse-wanted-dependency@6.0.0
133
+
134
+ ## 4.0.2
135
+
136
+ ### Patch Changes
137
+
138
+ - @pnpm/error@5.0.2
139
+
140
+ ## 4.0.1
141
+
142
+ ### Patch Changes
143
+
144
+ - @pnpm/error@5.0.1
145
+
146
+ ## 4.0.0
147
+
148
+ ### Major Changes
149
+
150
+ - eceaa8b8b: Node.js 14 support dropped.
151
+
152
+ ### Patch Changes
153
+
154
+ - Updated dependencies [eceaa8b8b]
155
+ - @pnpm/parse-wanted-dependency@5.0.0
156
+ - @pnpm/error@5.0.0
157
+
158
+ ## 3.0.3
159
+
160
+ ### Patch Changes
161
+
162
+ - Updated dependencies [2ae1c449d]
163
+ - @pnpm/parse-wanted-dependency@4.1.0
164
+
165
+ ## 3.0.2
166
+
167
+ ### Patch Changes
168
+
169
+ - @pnpm/error@4.0.1
170
+
171
+ ## 3.0.1
172
+
173
+ ### Patch Changes
174
+
175
+ - Updated dependencies [a9d59d8bc]
176
+ - @pnpm/parse-wanted-dependency@4.0.1
177
+
178
+ ## 3.0.0
179
+
180
+ ### Major Changes
181
+
182
+ - f884689e0: Require `@pnpm/logger` v5.
183
+
184
+ ### Patch Changes
185
+
186
+ - Updated dependencies [043d988fc]
187
+ - Updated dependencies [f884689e0]
188
+ - @pnpm/error@4.0.0
189
+ - @pnpm/parse-wanted-dependency@4.0.0
190
+
191
+ ## 2.0.4
192
+
193
+ ### Patch Changes
194
+
195
+ - Updated dependencies [e8a631bf0]
196
+ - @pnpm/error@3.1.0
197
+
198
+ ## 2.0.3
199
+
200
+ ### Patch Changes
201
+
202
+ - Updated dependencies [238a165a5]
203
+ - @pnpm/parse-wanted-dependency@3.0.2
204
+
205
+ ## 2.0.2
206
+
207
+ ### Patch Changes
208
+
209
+ - Updated dependencies [42c1ea1c0]
210
+ - @pnpm/parse-wanted-dependency@3.0.1
211
+
212
+ ## 2.0.1
213
+
214
+ ### Patch Changes
215
+
216
+ - @pnpm/error@3.0.1
217
+
218
+ ## 2.0.0
219
+
220
+ ### Major Changes
221
+
222
+ - 542014839: Node.js 12 is not supported.
223
+
224
+ ### Patch Changes
225
+
226
+ - Updated dependencies [542014839]
227
+ - @pnpm/error@3.0.0
228
+ - @pnpm/parse-wanted-dependency@3.0.0
229
+
230
+ ## 1.0.1
231
+
232
+ ### Patch Changes
233
+
234
+ - Updated dependencies [70ba51da9]
235
+ - @pnpm/error@2.1.0
236
+
237
+ ## 1.0.0
238
+
239
+ ### Major Changes
240
+
241
+ - 613211b16: Initial release.
package/lib/index.d.ts CHANGED
@@ -4,6 +4,13 @@ export interface VersionOverride {
4
4
  parentPkg?: PackageSelector;
5
5
  targetPkg: PackageSelector;
6
6
  newBareSpecifier: string;
7
+ /**
8
+ * True for empty-range selectors (`"pkg@"`): a convergence override. It
9
+ * applies to a dependency edge only when `newBareSpecifier` (always an
10
+ * exact version) satisfies the edge's declared range, so applying it can
11
+ * never violate a consumer's range.
12
+ */
13
+ converge?: boolean;
7
14
  }
8
15
  export interface PackageSelector {
9
16
  name: string;
package/lib/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { matchCatalogResolveResult, resolveFromCatalog } from '@pnpm/catalogs.resolver';
2
2
  import { PnpmError } from '@pnpm/error';
3
3
  import { parseWantedDependency } from '@pnpm/resolving.parse-wanted-dependency';
4
+ import semver from 'semver';
4
5
  const DELIMITER_REGEX = /[^ |@]>/;
5
6
  export function parseOverrides(overrides, catalogs) {
6
7
  const _resolveFromCatalog = resolveFromCatalog.bind(null, catalogs ?? {});
@@ -17,13 +18,28 @@ export function parseOverrides(overrides, catalogs) {
17
18
  throw new PnpmError('CATALOG_IN_OVERRIDES', `Could not resolve a catalog in the overrides: ${error.message}`);
18
19
  },
19
20
  });
20
- return {
21
+ const override = {
21
22
  selector,
22
23
  newBareSpecifier: resolvedCatalog ?? newBareSpecifier,
23
24
  ...result,
24
25
  };
26
+ return markConvergeOverride(override);
25
27
  });
26
28
  }
29
+ function markConvergeOverride(override) {
30
+ const emptyRangeInParentChildSelector = override.parentPkg != null &&
31
+ (override.parentPkg.bareSpecifier === '' || override.targetPkg.bareSpecifier === '');
32
+ if (emptyRangeInParentChildSelector) {
33
+ throw new PnpmError('INVALID_CONVERGENCE_OVERRIDE', `Cannot use an empty range in the "${override.selector}" selector: convergence overrides ("pkg@") cannot be combined with parent>child selectors`);
34
+ }
35
+ if (override.targetPkg.bareSpecifier !== '')
36
+ return override;
37
+ if (semver.valid(override.newBareSpecifier) == null) {
38
+ throw new PnpmError('INVALID_CONVERGENCE_OVERRIDE', `The value of the convergence override "${override.selector}" must be an exact version, but got "${override.newBareSpecifier}"`);
39
+ }
40
+ override.converge = true;
41
+ return override;
42
+ }
27
43
  export function parsePkgAndParentSelector(selector) {
28
44
  let delimiterIndex = selector.search(DELIMITER_REGEX);
29
45
  if (delimiterIndex !== -1) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/config.parse-overrides",
3
- "version": "1100.0.2",
3
+ "version": "1100.1.0",
4
4
  "description": "Parse overrides",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -30,11 +30,13 @@
30
30
  "@pnpm/catalogs.resolver": "1100.0.0",
31
31
  "@pnpm/catalogs.types": "1100.0.0",
32
32
  "@pnpm/error": "1100.0.1",
33
- "@pnpm/resolving.parse-wanted-dependency": "1100.0.1"
33
+ "@pnpm/resolving.parse-wanted-dependency": "1100.0.1",
34
+ "semver": "^7.8.4"
34
35
  },
35
36
  "devDependencies": {
36
37
  "@jest/globals": "30.4.1",
37
- "@pnpm/config.parse-overrides": "1100.0.2"
38
+ "@pnpm/config.parse-overrides": "1100.1.0",
39
+ "@types/semver": "7.7.1"
38
40
  },
39
41
  "engines": {
40
42
  "node": ">=22.13"