From 23e96e680a89f3572950c1b3471afd986f0e9be0 Mon Sep 17 00:00:00 2001 From: confused-Techie Date: Mon, 30 Dec 2024 15:50:12 -0800 Subject: [PATCH 1/4] Ensure errors that are still captured as an object are readable --- src/request.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/request.js b/src/request.js index c9f1dd88..19ed75be 100644 --- a/src/request.js +++ b/src/request.js @@ -15,7 +15,7 @@ function loadNpm() { userconfig: config.getUserConfigPath(), globalconfig: config.getGlobalConfigPath() }; - return new Promise((resolve, reject) => + return new Promise((resolve, reject) => void npm.load(npmOptions, (error, value) => void(error != null ? reject(error) : resolve(value))) ); }; @@ -114,7 +114,13 @@ module.exports = { if (err?.status === 503) { return `${err.response.req.host} is temporarily unavailable, please try again later.`; } else { - return err?.response?.body ?? err?.response?.error ?? err ?? body.message ?? body.error ?? body; + let msg = err?.response?.body?.message ?? err?.response?.body ?? err?.response?.error ?? err ?? body.message ?? body.error ?? body; + if (typeof msg === "object") { + // If we found a message that's still an object lets make sure it'll + // still be readable for users + msg = JSON.stringify(msg); + } + return msg; } }, From 3e1fb43fb6a7208f00d41d9aa986a5d8db072f83 Mon Sep 17 00:00:00 2001 From: confused-Techie Date: Mon, 30 Dec 2024 15:52:59 -0800 Subject: [PATCH 2/4] Always use `request.getErrorMessage` in `develop.js` --- src/develop.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/develop.js b/src/develop.js index ebb67f98..55050fc3 100644 --- a/src/develop.js +++ b/src/develop.js @@ -47,7 +47,7 @@ cmd-shift-o to run the package out of the newly cloned repository.\ url: `${config.getAtomPackagesUrl()}/${packageName}`, json: true }; - const response = await request.get(requestSettings).catch(error => Promise.reject(`Request for package information failed: ${error.message}`)); + const response = await request.get(requestSettings).catch(error => Promise.reject(`Request for package information failed: ${request.getErrorMessage(null, error)}`)); const body = response.body ?? {}; if (response.statusCode === 200) { @@ -110,7 +110,7 @@ cmd-shift-o to run the package out of the newly cloned repository.\ try { const repoUrl = await this.getRepositoryUrl(packageName); - + await this.cloneRepository(repoUrl, packageDirectory, options); await this.installDependencies(packageDirectory, options); await this.linkPackage(packageDirectory, options); From a5d94d48be5ae20a6ea0cd2507116b2aaa7fe8d8 Mon Sep 17 00:00:00 2001 From: confused-Techie Date: Mon, 30 Dec 2024 15:53:13 -0800 Subject: [PATCH 3/4] Resolve usage of undefined variable --- src/develop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/develop.js b/src/develop.js index 55050fc3..1c0caa27 100644 --- a/src/develop.js +++ b/src/develop.js @@ -59,7 +59,7 @@ cmd-shift-o to run the package out of the newly cloned repository.\ throw `No repository URL found for package: ${packageName}`; } - const message = request.getErrorMessage(body, error); + const message = request.getErrorMessage(body, null); throw `Request for package information failed: ${message}`; } From 5e7dbf0371e3bcbf51679de20691a115a57e10c4 Mon Sep 17 00:00:00 2001 From: confused-Techie Date: Mon, 30 Dec 2024 16:05:44 -0800 Subject: [PATCH 4/4] Ensure we use `request.getErrorMessage()` everywhere applicable --- src/install.js | 2 +- src/star.js | 4 ++-- src/unpublish.js | 8 ++++---- src/view.js | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/install.js b/src/install.js index dc3ade4e..a4d24228 100644 --- a/src/install.js +++ b/src/install.js @@ -223,7 +223,7 @@ Run ppm -v after installing Git to see what version has been detected.\ retries: 4 }; const response = await request.get(requestSettings).catch(error => { - let message = `Request for package information failed: ${error.message}`; + let message = `Request for package information failed: ${request.getErrorMessage(null, error)}`; if (error.status) { message += ` (${error.status})`; } throw message; }); diff --git a/src/star.js b/src/star.js index e5f7251b..6f4c29c0 100644 --- a/src/star.js +++ b/src/star.js @@ -44,7 +44,7 @@ Run \`ppm stars\` to see all your starred packages.\ } }; - const response = await request.post(requestSettings).catch(error => { this.logFailure(); throw error; }); + const response = await request.post(requestSettings).catch(error => { this.logFailure(); throw request.getErrorMessage(null, error); }); const body = response.body ?? {}; if ((response.statusCode === 404) && ignoreUnpublishedPackages) { process.stdout.write('skipped (not published)\n'.yellow); @@ -52,7 +52,7 @@ Run \`ppm stars\` to see all your starred packages.\ } if (response.statusCode !== 200) { this.logFailure(); - const message = request.getErrorMessage(body, error); + const message = request.getErrorMessage(body, null); throw `Starring package failed: ${message}`; } diff --git a/src/unpublish.js b/src/unpublish.js index 2b3210a5..64d66d57 100644 --- a/src/unpublish.js +++ b/src/unpublish.js @@ -49,18 +49,18 @@ name is specified.\ if (packageVersion) { options.url += `/versions/${packageVersion}`; } - const response = await request.del(options).catch(error => { this.logFailure(); throw error; }); //it's not clear why we are calling logFailure in two layers (here and in the usual try-catch around it) + const response = await request.del(options).catch(error => { this.logFailure(); throw request.getErrorMessage(null, error); }); //it's not clear why we are calling logFailure in two layers (here and in the usual try-catch around it) const body = response.body ?? {}; if (response.statusCode !== 204) { this.logFailure(); - const message = body.message ?? body.error ?? body; + const message = request.getErrorMessage(body, null); throw `Unpublishing failed: ${message}`; } this.logSuccess(); } catch (error) { - this.logFailure(); - throw error; + this.logFailure(); + throw error; } } diff --git a/src/view.js b/src/view.js index e169d095..fab10be8 100644 --- a/src/view.js +++ b/src/view.js @@ -73,11 +73,11 @@ View information about a package/theme.\ url: `${config.getAtomPackagesUrl()}/${packageName}`, json: true }; - + const response = await request.get(requestSettings); const body = response.body ?? {}; if (response.statusCode !== 200) { - const message = body.message ?? body.error ?? body; + const message = request.getErrorMessage(body, null); throw `Requesting package failed: ${message}`; }