2026-02-08 15:01:42 +09:00
|
|
|
import { fetchNpmDistTags } from "./npm-dist-tags"
|
|
|
|
|
|
2026-03-14 12:43:54 +09:00
|
|
|
const DEFAULT_PACKAGE_NAME = "oh-my-opencode"
|
2026-02-08 15:01:42 +09:00
|
|
|
const PRIORITIZED_TAGS = ["latest", "beta", "next"] as const
|
|
|
|
|
|
2026-03-14 12:43:54 +09:00
|
|
|
function getFallbackEntry(version: string, packageName: string): string {
|
2026-02-21 04:10:27 +09:00
|
|
|
const prereleaseMatch = version.match(/-([a-zA-Z][a-zA-Z0-9-]*)(?:\.|$)/)
|
2026-02-21 02:24:43 +09:00
|
|
|
if (prereleaseMatch) {
|
2026-03-14 12:43:54 +09:00
|
|
|
return `${packageName}@${prereleaseMatch[1]}`
|
2026-02-21 02:24:43 +09:00
|
|
|
}
|
|
|
|
|
|
2026-03-14 12:43:54 +09:00
|
|
|
return packageName
|
2026-02-21 02:24:43 +09:00
|
|
|
}
|
|
|
|
|
|
2026-03-14 12:43:54 +09:00
|
|
|
export async function getPluginNameWithVersion(
|
|
|
|
|
currentVersion: string,
|
|
|
|
|
packageName: string = DEFAULT_PACKAGE_NAME
|
|
|
|
|
): Promise<string> {
|
2026-03-14 13:52:57 +09:00
|
|
|
const distTags = await fetchNpmDistTags(packageName)
|
2026-03-14 12:43:54 +09:00
|
|
|
|
2026-02-08 15:01:42 +09:00
|
|
|
|
|
|
|
|
if (distTags) {
|
|
|
|
|
const allTags = new Set([...PRIORITIZED_TAGS, ...Object.keys(distTags)])
|
|
|
|
|
for (const tag of allTags) {
|
|
|
|
|
if (distTags[tag] === currentVersion) {
|
2026-03-14 12:43:54 +09:00
|
|
|
return `${packageName}@${tag}`
|
2026-02-08 15:01:42 +09:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-14 12:43:54 +09:00
|
|
|
return getFallbackEntry(currentVersion, packageName)
|
2026-02-08 15:01:42 +09:00
|
|
|
}
|