-
-
Notifications
You must be signed in to change notification settings - Fork 425
Expand file tree
/
Copy pathreleases.ts
More file actions
38 lines (32 loc) · 1.22 KB
/
releases.ts
File metadata and controls
38 lines (32 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import type { Release } from '~/composables/useRepoMeta'
/**
* Match an npm version string to a repository release.
* Handles various tag formats: "v1.0.0", "1.0.0", "release-1.0.0", etc.
*
* @param version - npm version string (e.g., "1.2.3", "0.9.0-beta.1")
* @param releases - Array of releases from repository
* @returns Matched release or null
*/
export function getMatchedRelease(version: string, releases: Release[]): Release | null {
if (!version || !releases.length) return null
// Normalize version for comparison (remove any existing 'v' prefix)
const normalizedVersion = version.replace(/^v/, '').toLowerCase()
// Try exact matches with common tag formats
const tagVariants = [
`v${normalizedVersion}`, // Most common: v1.0.0
normalizedVersion, // Without prefix: 1.0.0
`release-${normalizedVersion}`, // Some projects: release-1.0.0
`${normalizedVersion}-release`, // Alternative: 1.0.0-release
]
for (const release of releases) {
if (!release.url) continue
const releaseTag = release.tag.toLowerCase()
// Check each variant (case-insensitive)
for (const variant of tagVariants) {
if (releaseTag === variant) {
return release
}
}
}
return null
}