@@ -137,7 +137,7 @@ module.exports = {
137
137
* @returns {boolean } `true` if it's supporting.
138
138
*/
139
139
function isNotSupportingVersion ( aCase ) {
140
- return ! semverSubset ( versionRange , getSemverRange ( aCase . supported ) )
140
+ return ! semver . subset ( versionRange , getSemverRange ( aCase . supported ) )
141
141
}
142
142
143
143
/** @type {TemplateListener } */
@@ -171,208 +171,3 @@ module.exports = {
171
171
)
172
172
}
173
173
}
174
-
175
- // TODO replace semver.subset() in the major version.
176
- /**
177
- * semver.subset()
178
- *
179
- * We need to use a copy of the semver source code until a major version upgrade.
180
- *
181
- * @see https://github.com/npm/node-semver/blob/e79ac3a450e8bb504e78b8159e3efc70895699b8/ranges/subset.js#L43
182
- * @license ISC at Isaac Z. Schlueter and Contributors
183
- * https://github.com/npm/node-semver/blob/master/LICENSE
184
- *
185
- * @param {semver.Range } sub
186
- * @param {semver.Range } dom
187
- */
188
- function semverSubset ( sub , dom ) {
189
- if ( sub === dom ) return true
190
-
191
- sub = new semver . Range ( sub )
192
- dom = new semver . Range ( dom )
193
- let sawNonNull = false
194
-
195
- // eslint-disable-next-line no-labels
196
- OUTER: for ( const simpleSub of sub . set ) {
197
- for ( const simpleDom of dom . set ) {
198
- const isSub = simpleSubset ( simpleSub , simpleDom )
199
- sawNonNull = sawNonNull || isSub !== null
200
- // eslint-disable-next-line no-labels
201
- if ( isSub ) continue OUTER
202
- }
203
- if ( sawNonNull ) return false
204
- }
205
- return true
206
- }
207
-
208
- /**
209
- * @license ISC at Isaac Z. Schlueter and Contributors
210
- * https://github.com/npm/node-semver/blob/master/LICENSE
211
- * @param {readonly semver.Comparator[] } sub
212
- * @param {readonly semver.Comparator[] } dom
213
- */
214
- function simpleSubset ( sub , dom ) {
215
- if ( sub === dom ) return true
216
-
217
- /**
218
- * @param {semver.Comparator } c
219
- */
220
- function isAny ( c ) {
221
- return Object . keys ( c . semver ) . length === 0
222
- }
223
-
224
- if ( sub . length === 1 && isAny ( sub [ 0 ] ) ) {
225
- if ( dom . length === 1 && isAny ( dom [ 0 ] ) ) return true
226
- else sub = [ new semver . Comparator ( '>=0.0.0' ) ]
227
- }
228
-
229
- if ( dom . length === 1 && isAny ( dom [ 0 ] ) ) {
230
- dom = [ new semver . Comparator ( '>=0.0.0' ) ]
231
- }
232
-
233
- const eqSet = new Set ( )
234
- let gt , lt
235
- for ( const c of sub ) {
236
- if ( c . operator === '>' || c . operator === '>=' ) gt = higherGT ( gt , c )
237
- else if ( c . operator === '<' || c . operator === '<=' ) lt = lowerLT ( lt , c )
238
- else eqSet . add ( c . semver )
239
- }
240
-
241
- if ( eqSet . size > 1 ) return null
242
-
243
- let gtltComp
244
- if ( gt && lt ) {
245
- gtltComp = semver . compare ( gt . semver , lt . semver )
246
- if ( gtltComp > 0 ) return null
247
- else if ( gtltComp === 0 && ( gt . operator !== '>=' || lt . operator !== '<=' ) )
248
- return null
249
- }
250
-
251
- // will iterate one or zero times
252
- for ( const eq of eqSet ) {
253
- if ( gt && ! semver . satisfies ( eq , String ( gt ) ) ) return null
254
-
255
- if ( lt && ! semver . satisfies ( eq , String ( lt ) ) ) return null
256
-
257
- for ( const c of dom ) {
258
- if ( ! semver . satisfies ( eq , String ( c ) ) ) return false
259
- }
260
-
261
- return true
262
- }
263
-
264
- let higher , lower
265
- let hasDomLT , hasDomGT
266
- // if the subset has a prerelease, we need a comparator in the superset
267
- // with the same tuple and a prerelease, or it's not a subset
268
- let needDomLTPre = lt && lt . semver . prerelease . length ? lt . semver : false
269
- let needDomGTPre = gt && gt . semver . prerelease . length ? gt . semver : false
270
- // exception: <1.2.3-0 is the same as <1.2.3
271
- if (
272
- needDomLTPre &&
273
- needDomLTPre . prerelease . length === 1 &&
274
- lt &&
275
- lt . operator === '<' &&
276
- needDomLTPre . prerelease [ 0 ] === 0
277
- ) {
278
- needDomLTPre = false
279
- }
280
-
281
- for ( const c of dom ) {
282
- hasDomGT = hasDomGT || c . operator === '>' || c . operator === '>='
283
- hasDomLT = hasDomLT || c . operator === '<' || c . operator === '<='
284
- if ( gt ) {
285
- if ( needDomGTPre ) {
286
- if (
287
- c . semver . prerelease &&
288
- c . semver . prerelease . length &&
289
- c . semver . major === needDomGTPre . major &&
290
- c . semver . minor === needDomGTPre . minor &&
291
- c . semver . patch === needDomGTPre . patch
292
- ) {
293
- needDomGTPre = false
294
- }
295
- }
296
- if ( c . operator === '>' || c . operator === '>=' ) {
297
- higher = higherGT ( gt , c )
298
- if ( higher === c && higher !== gt ) return false
299
- } else if (
300
- gt . operator === '>=' &&
301
- ! semver . satisfies ( gt . semver , String ( c ) )
302
- )
303
- return false
304
- }
305
- if ( lt ) {
306
- if ( needDomLTPre ) {
307
- if (
308
- c . semver . prerelease &&
309
- c . semver . prerelease . length &&
310
- c . semver . major === needDomLTPre . major &&
311
- c . semver . minor === needDomLTPre . minor &&
312
- c . semver . patch === needDomLTPre . patch
313
- ) {
314
- needDomLTPre = false
315
- }
316
- }
317
- if ( c . operator === '<' || c . operator === '<=' ) {
318
- lower = lowerLT ( lt , c )
319
- if ( lower === c && lower !== lt ) return false
320
- } else if (
321
- lt . operator === '<=' &&
322
- ! semver . satisfies ( lt . semver , String ( c ) )
323
- )
324
- return false
325
- }
326
- if ( ! c . operator && ( lt || gt ) && gtltComp !== 0 ) return false
327
- }
328
-
329
- // if there was a < or >, and nothing in the dom, then must be false
330
- // UNLESS it was limited by another range in the other direction.
331
- // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
332
- if ( gt && hasDomLT && ! lt && gtltComp !== 0 ) return false
333
-
334
- if ( lt && hasDomGT && ! gt && gtltComp !== 0 ) return false
335
-
336
- // we needed a prerelease range in a specific tuple, but didn't get one
337
- // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
338
- // because it includes prereleases in the 1.2.3 tuple
339
- if ( needDomGTPre || needDomLTPre ) return false
340
-
341
- return true
342
- }
343
-
344
- /**
345
- * @license ISC at Isaac Z. Schlueter and Contributors
346
- * https://github.com/npm/node-semver/blob/master/LICENSE
347
- * @param {semver.Comparator | void } a
348
- * @param {semver.Comparator } b
349
- */
350
- const higherGT = ( a , b ) => {
351
- if ( ! a ) return b
352
- const comp = semver . compare ( a . semver , b . semver )
353
- return comp > 0
354
- ? a
355
- : comp < 0
356
- ? b
357
- : b . operator === '>' && a . operator === '>='
358
- ? b
359
- : a
360
- }
361
-
362
- /**
363
- * @license ISC at Isaac Z. Schlueter and Contributors
364
- * https://github.com/npm/node-semver/blob/master/LICENSE
365
- * @param {semver.Comparator | void } a
366
- * @param {semver.Comparator } b
367
- */
368
- const lowerLT = ( a , b ) => {
369
- if ( ! a ) return b
370
- const comp = semver . compare ( a . semver , b . semver )
371
- return comp < 0
372
- ? a
373
- : comp > 0
374
- ? b
375
- : b . operator === '<' && a . operator === '<='
376
- ? b
377
- : a
378
- }
0 commit comments