Skip to content

Commit 5e33491

Browse files
committed
refactor: simplify
1 parent b56aa2e commit 5e33491

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

app/components/Package/DownloadButton.vue

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,38 @@ const props = defineProps<{
88
99
const loading = shallowRef(false)
1010
11+
async function getDownloadUrl(tarballUrl: string) {
12+
try {
13+
const response = await fetch(tarballUrl)
14+
if (!response.ok) {
15+
throw new Error(`Failed to fetch tarball (${response.status})`)
16+
}
17+
const blob = await response.blob()
18+
return URL.createObjectURL(blob)
19+
} catch (error) {
20+
console.error('failed to fetch tarball', { cause: error })
21+
return null
22+
}
23+
}
24+
1125
async function downloadPackage() {
1226
const tarballUrl = props.version.dist.tarball
1327
if (!tarballUrl) return
1428
1529
if (loading.value) return
1630
loading.value = true
1731
18-
try {
19-
const response = await fetch(tarballUrl)
20-
if (!response.ok) {
21-
loading.value = false
22-
throw new Error(`Failed to fetch tarball (${response.status})`)
23-
}
24-
const blob = await response.blob()
25-
const url = URL.createObjectURL(blob)
26-
const link = document.createElement('a')
27-
link.href = url
28-
link.download = `${props.packageName.replace(/\//g, '__')}-${props.version.version}.tgz`
29-
document.body.appendChild(link)
30-
link.click()
31-
document.body.removeChild(link)
32-
URL.revokeObjectURL(url)
33-
} catch {
34-
// Fallback to direct link for non-CORS or other issues, though download attribute may be ignored
35-
const link = document.createElement('a')
36-
link.href = tarballUrl
37-
link.download = `${props.packageName.replace(/\//g, '__')}-${props.version.version}.tgz`
38-
document.body.appendChild(link)
39-
link.click()
40-
document.body.removeChild(link)
32+
const downloadUrl = await getDownloadUrl(tarballUrl)
33+
34+
const link = document.createElement('a')
35+
link.href = downloadUrl ?? tarballUrl
36+
link.download = `${props.packageName.replace(/\//g, '__')}-${props.version.version}.tgz`
37+
document.body.appendChild(link)
38+
link.click()
39+
document.body.removeChild(link)
40+
41+
if (downloadUrl) {
42+
URL.revokeObjectURL(downloadUrl)
4143
}
4244
4345
loading.value = false

0 commit comments

Comments
 (0)