Skip to content

Commit 2ccaaf3

Browse files
committed
Update github-asset.ts
Proposed fix from coderabbitai
1 parent 9a992a6 commit 2ccaaf3

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

src/github-asset.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,35 @@ export function getHexFromDigest(digest: GitHubDigest): string {
6363
* Latest: https://github.com/oven-sh/bun/releases/latest/download/bun-darwin-aarch64.zip
6464
*/
6565
export function parseAssetUrl(downloadUrl: string): UrlAssetMetadata {
66-
const url = new URL(downloadUrl);
66+
const urlObj = new URL(downloadUrl);
67+
if ("github.com" !== urlObj.hostname) {
68+
throw new Error(`Expected a github.com URL, got: ${urlObj.hostname}`);
69+
}
70+
6771
// Remove leading slash so index 0 is 'owner'
68-
const parts = url.pathname.slice(1).split("/");
72+
const parts = urlObj.pathname.slice(1).split("/");
73+
if (parts.length < 6) {
74+
throw new Error(`Unsupported GitHub asset URL format: ${downloadUrl}`);
75+
}
76+
77+
const expectedStructure =
78+
"releases" === parts[2] &&
79+
(("latest" === parts[3] && "download" === parts[4]) ||
80+
"download" === parts[3]);
6981

7082
const owner = parts[0];
7183
const repo = parts[1];
7284
let tag = parts[4];
7385
const name = parts[5];
7486

75-
if (!owner || !repo || !tag || !name) {
87+
if (!expectedStructure || !owner || !repo || !tag || !name) {
7688
throw new Error(
7789
`Failed to parse GitHub asset metadata from: ${downloadUrl}`,
7890
);
7991
}
8092

81-
let latest = false;
82-
if ("latest" === parts[3] && "download" === tag) {
83-
latest = true;
93+
const latest = "latest" === parts[3] && "download" === tag;
94+
if (latest) {
8495
tag = "";
8596
}
8697

0 commit comments

Comments
 (0)