Skip to content

Commit 52a9dcb

Browse files
committed
refactor: simplify
1 parent b56aa2e commit 52a9dcb

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

app/components/Package/DownloadButton.vue

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,39 @@ 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+
// oxlint-disable-next-line no-console -- error logging
21+
console.error('failed to fetch tarball', { cause: error })
22+
return null
23+
}
24+
}
25+
1126
async function downloadPackage() {
1227
const tarballUrl = props.version.dist.tarball
1328
if (!tarballUrl) return
1429
1530
if (loading.value) return
1631
loading.value = true
1732
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)
33+
const downloadUrl = await getDownloadUrl(tarballUrl)
34+
35+
const link = document.createElement('a')
36+
link.href = downloadUrl ?? 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)
41+
42+
if (downloadUrl) {
43+
URL.revokeObjectURL(downloadUrl)
4144
}
4245
4346
loading.value = false

0 commit comments

Comments
 (0)