MCPcopy Index your code
hub / github.com/CodebuffAI/codebuff / compareVersions

Function compareVersions

cli/release/index.js:231–293  ·  view source on GitHub ↗
(v1, v2)

Source from the content-addressed store, hash-verified

229}
230
231function compareVersions(v1, v2) {
232 if (!v1 || !v2) return 0
233
234 // Always update if the current version is not a valid semver
235 // e.g. 1.0.420-beta.1
236 if (!v1.match(/^\d+(\.\d+)*$/)) {
237 return -1
238 }
239
240 const parseVersion = (version) => {
241 const parts = version.split('-')
242 const mainParts = parts[0].split('.').map(Number)
243 const prereleaseParts = parts[1] ? parts[1].split('.') : []
244 return { main: mainParts, prerelease: prereleaseParts }
245 }
246
247 const p1 = parseVersion(v1)
248 const p2 = parseVersion(v2)
249
250 for (let i = 0; i < Math.max(p1.main.length, p2.main.length); i++) {
251 const n1 = p1.main[i] || 0
252 const n2 = p2.main[i] || 0
253
254 if (n1 < n2) return -1
255 if (n1 > n2) return 1
256 }
257
258 if (p1.prerelease.length === 0 && p2.prerelease.length === 0) {
259 return 0
260 } else if (p1.prerelease.length === 0) {
261 return 1
262 } else if (p2.prerelease.length === 0) {
263 return -1
264 } else {
265 for (
266 let i = 0;
267 i < Math.max(p1.prerelease.length, p2.prerelease.length);
268 i++
269 ) {
270 const pr1 = p1.prerelease[i] || ''
271 const pr2 = p2.prerelease[i] || ''
272
273 const isNum1 = !isNaN(parseInt(pr1))
274 const isNum2 = !isNaN(parseInt(pr2))
275
276 if (isNum1 && isNum2) {
277 const num1 = parseInt(pr1)
278 const num2 = parseInt(pr2)
279 if (num1 < num2) return -1
280 if (num1 > num2) return 1
281 } else if (isNum1 && !isNum2) {
282 return 1
283 } else if (!isNum1 && isNum2) {
284 return -1
285 } else if (pr1 < pr2) {
286 return -1
287 } else if (pr1 > pr2) {
288 return 1

Callers 1

checkForUpdatesFunction · 0.70

Calls 1

parseVersionFunction · 0.70

Tested by

no test coverage detected