Skip to content

Commit 0287122

Browse files
authored
Merge pull request #12 from vados-cosmonic/refactor=improve-error-message-for-failure-pulling-weval
refactor: improve error message during weval pull failure
2 parents 277fabf + 888b6f0 commit 0287122

File tree

1 file changed

+47
-37
lines changed

1 file changed

+47
-37
lines changed

npm/weval/index.js

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import { dirname, join, parse } from 'node:path';
44
import { platform, arch } from "node:process";
55
import { mkdir } from "node:fs/promises";
66
import { existsSync } from "node:fs";
7+
78
import decompress from 'decompress';
89
import decompressUnzip from 'decompress-unzip';
910
import decompressTar from 'decompress-tar';
1011
import xz from '@napi-rs/lzma/xz';
12+
1113
const __dirname = dirname(fileURLToPath(import.meta.url));
1214

1315
const TAG = "v0.3.2";
@@ -31,12 +33,18 @@ async function getWeval() {
3133
}
3234

3335
async function getJSON(url) {
34-
let response = await fetch(url);
35-
if (!response.ok) {
36-
console.error(`Bad response from ${url}`);
37-
process.exit(1);
36+
let resp;
37+
try {
38+
resp = await fetch(url);
39+
if (!resp.ok) {
40+
throw new Error("non 2xx response code");
3841
}
39-
return response.json();
42+
return resp.json();
43+
} catch (err) {
44+
const errMsg = err?.toString() ?? 'unknown error';
45+
console.error(`failed to fetch JSON from URL [${url}] (status ${resp?.status}): ${errMsg}`);
46+
process.exit(1);
47+
}
4048
}
4149

4250
const platformName = getPlatformName();
@@ -46,40 +54,42 @@ async function getWeval() {
4654
const exeDir = join(__dirname, platformName);
4755
const exe = join(exeDir, `weval${exeSuffix}`);
4856

49-
if (!existsSync(exe)) {
50-
await mkdir(exeDir, { recursive: true });
57+
// If we already have the executable installed, then return it
58+
if (existsSync(exe)) {
59+
return exe;
60+
}
5161

52-
let repoBaseURL = `https://api.github.com/repos/bytecodealliance/weval`;
53-
let response = await getJSON(`${repoBaseURL}/releases/tags/${TAG}`);
54-
let id = response.id;
55-
let assets = await getJSON(`${repoBaseURL}/releases/${id}/assets`);
56-
let releaseAsset = `weval-${TAG}-${platformName}.${assetSuffix}`;
57-
let asset = assets.find(asset => asset.name === releaseAsset);
58-
if (!asset) {
59-
console.error(`Can't find an asset named ${releaseAsset}`);
60-
process.exit(1);
61-
}
62-
let data = await fetch(asset.browser_download_url);
63-
if (!data.ok) {
64-
console.error(`Error downloading ${asset.browser_download_url}`);
65-
process.exit(1);
66-
}
67-
let buf = await data.arrayBuffer();
62+
await mkdir(exeDir, { recursive: true });
63+
let repoBaseURL = `https://api.github.com/repos/bytecodealliance/weval`;
64+
let response = await getJSON(`${repoBaseURL}/releases/tags/${TAG}`);
65+
let id = response.id;
66+
let assets = await getJSON(`${repoBaseURL}/releases/${id}/assets`);
67+
let releaseAsset = `weval-${TAG}-${platformName}.${assetSuffix}`;
68+
let asset = assets.find(asset => asset.name === releaseAsset);
69+
if (!asset) {
70+
console.error(`Can't find an asset named ${releaseAsset}`);
71+
process.exit(1);
72+
}
73+
let data = await fetch(asset.browser_download_url);
74+
if (!data.ok) {
75+
console.error(`Error downloading ${asset.browser_download_url}`);
76+
process.exit(1);
77+
}
78+
let buf = await data.arrayBuffer();
6879

69-
if (releaseAsset.endsWith('.xz')) {
70-
buf = await xz.decompress(new Uint8Array(buf));
71-
}
72-
await decompress(Buffer.from(buf), exeDir, {
73-
// Remove the leading directory from the extracted file.
74-
strip: 1,
75-
plugins: [
76-
decompressUnzip(),
77-
decompressTar()
78-
],
79-
// Only extract the binary file and nothing else
80-
filter: file => parse(file.path).base === `weval${exeSuffix}`,
81-
});
82-
}
80+
if (releaseAsset.endsWith('.xz')) {
81+
buf = await xz.decompress(new Uint8Array(buf));
82+
}
83+
await decompress(Buffer.from(buf), exeDir, {
84+
// Remove the leading directory from the extracted file.
85+
strip: 1,
86+
plugins: [
87+
decompressUnzip(),
88+
decompressTar()
89+
],
90+
// Only extract the binary file and nothing else
91+
filter: file => parse(file.path).base === `weval${exeSuffix}`,
92+
});
8393

8494
return exe;
8595
}

0 commit comments

Comments
 (0)