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

Function compareVersions

cli/release-staging/index.js:232–294  ·  view source on GitHub ↗
(v1, v2)

Source from the content-addressed store, hash-verified

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

Callers 1

checkForUpdatesFunction · 0.70

Calls 1

parseVersionFunction · 0.70

Tested by

no test coverage detected