@@ -144,14 +144,14 @@ function withPeerService (tracer, pluginName, spanGenerationFn, service, service
144
144
} )
145
145
}
146
146
147
- // function isVersionInRange(version, latestVersion) {
148
- // if (!latestVersion) return true
149
- // try {
150
- // return semver.lte(version, latestVersion)
151
- // } catch (e) {
152
- // return true // TODO this is a bit of a hack, but I'm not sure what else to do
153
- // }
154
- // }
147
+ function isVersionInRange ( version , latestVersion ) {
148
+ if ( ! latestVersion ) return true
149
+ try {
150
+ return semver . lte ( version , latestVersion )
151
+ } catch ( e ) {
152
+ return true // Safety fallback for invalid semver strings
153
+ }
154
+ }
155
155
156
156
function withVersions ( plugin , modules , range , cb ) {
157
157
const instrumentations = typeof plugin === 'string' ? getInstrumentation ( plugin ) : [ ] . concat ( plugin )
@@ -179,7 +179,7 @@ function withVersions (plugin, modules, range, cb) {
179
179
if ( ! packages . includes ( moduleName ) ) return
180
180
}
181
181
182
- const latestVersion = latestVersions [ moduleName ] // TODO is moduleName correct?
182
+ const latestVersion = latestVersions [ moduleName ]
183
183
184
184
const testVersions = new Map ( )
185
185
@@ -198,28 +198,39 @@ function withVersions (plugin, modules, range, cb) {
198
198
testVersions . set ( min , { range : version , test : min } )
199
199
}
200
200
201
- // TODO may run into issues with the latest version being greater than supported Node?
201
+ // attempt to find the latest version that satisfies the version range
202
202
if ( latestVersion && ! process . env . PACKAGE_VERSION_RANGE ) {
203
- const testVersion = semver . lte ( version , latestVersion ) ? version : latestVersion
204
- testVersions . set ( testVersion , { range : version , test : testVersion } )
203
+ if ( semver . valid ( version ) ) {
204
+ const testVersion = isVersionInRange ( version , latestVersion ) ? version : latestVersion
205
+ testVersions . set ( testVersion , { range : version , test : testVersion } )
206
+ } else if ( semver . validRange ( version ) ) {
207
+ const testVersion = semver . maxSatisfying ( [ latestVersion ] , version )
208
+ if ( testVersion ) {
209
+ testVersions . set ( testVersion , { range : version , test : testVersion } )
210
+ }
211
+ }
205
212
} else if ( latestVersion ) {
206
213
const range = process . env . PACKAGE_VERSION_RANGE
207
214
const testVersion = semver . satisfies ( latestVersion , range )
208
215
? latestVersion
209
- : semver . maxSatisfying ( [ version , latestVersion ] , range )
216
+ : semver . maxSatisfying ( [ latestVersion ] , range )
210
217
if ( testVersion ) {
211
218
testVersions . set ( testVersion , { range : version , test : testVersion } )
212
219
}
213
220
} else {
214
- const max = require ( `../../../../versions/${ moduleName } @${ version } ` ) . version ( )
215
- testVersions . set ( max , { range : version , test : version } )
221
+ try {
222
+ const max = require ( `../../../../versions/${ moduleName } @${ version } ` ) . version ( )
223
+ testVersions . set ( max , { range : version , test : version } )
224
+ } catch ( err ) {
225
+ // FIX ME: how to log this error?
226
+ }
216
227
}
217
228
} )
218
229
} )
219
230
220
231
Array . from ( testVersions )
221
232
. filter ( v => ! range || semver . satisfies ( v [ 0 ] , range ) )
222
- . sort ( v => v [ 0 ] . localeCompare ( v [ 0 ] ) )
233
+ . sort ( ( a , b ) => semver . compare ( a [ 0 ] , b [ 0 ] ) )
223
234
. map ( v => Object . assign ( { } , v [ 1 ] , { version : v [ 0 ] } ) )
224
235
. forEach ( v => {
225
236
const versionPath = path . resolve (
0 commit comments