Skip to content

Commit 345ed6b

Browse files
committed
Attempt to validate semver ranges
1 parent 353fffb commit 345ed6b

File tree

1 file changed

+27
-16
lines changed

1 file changed

+27
-16
lines changed

packages/dd-trace/test/setup/mocha.js

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,14 @@ function withPeerService (tracer, pluginName, spanGenerationFn, service, service
144144
})
145145
}
146146

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+
}
155155

156156
function withVersions (plugin, modules, range, cb) {
157157
const instrumentations = typeof plugin === 'string' ? getInstrumentation(plugin) : [].concat(plugin)
@@ -179,7 +179,7 @@ function withVersions (plugin, modules, range, cb) {
179179
if (!packages.includes(moduleName)) return
180180
}
181181

182-
const latestVersion = latestVersions[moduleName] // TODO is moduleName correct?
182+
const latestVersion = latestVersions[moduleName]
183183

184184
const testVersions = new Map()
185185

@@ -198,28 +198,39 @@ function withVersions (plugin, modules, range, cb) {
198198
testVersions.set(min, { range: version, test: min })
199199
}
200200

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
202202
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+
}
205212
} else if (latestVersion) {
206213
const range = process.env.PACKAGE_VERSION_RANGE
207214
const testVersion = semver.satisfies(latestVersion, range)
208215
? latestVersion
209-
: semver.maxSatisfying([version, latestVersion], range)
216+
: semver.maxSatisfying([latestVersion], range)
210217
if (testVersion) {
211218
testVersions.set(testVersion, { range: version, test: testVersion })
212219
}
213220
} 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+
}
216227
}
217228
})
218229
})
219230

220231
Array.from(testVersions)
221232
.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]))
223234
.map(v => Object.assign({}, v[1], { version: v[0] }))
224235
.forEach(v => {
225236
const versionPath = path.resolve(

0 commit comments

Comments
 (0)