From 3cd00842eda7a72291c7c7b5dfbaba5b732a00a6 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Mon, 9 Sep 2024 10:49:25 -0400 Subject: [PATCH] fix: print full error and cause with flag --verbose --- src/api.js | 12 ++++++------ src/cli.js | 16 ++++++++++++++-- test/cli.mjs | 4 ++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/api.js b/src/api.js index ed833cf..389c3f0 100644 --- a/src/api.js +++ b/src/api.js @@ -16,8 +16,8 @@ async function inject(filename, resourceName, resourceData, options) { try { await fs.access(filename, constants.R_OK | constants.W_OK); - } catch { - throw new Error("Can't read and write to target executable"); + } catch (cause) { + throw new Error("Can't read and write to target executable", { cause }); } let executable; @@ -26,8 +26,8 @@ async function inject(filename, resourceName, resourceData, options) { try { executable = await fs.readFile(filename); - } catch { - throw new Error("Couldn't read target executable"); + } catch (cause) { + throw new Error("Couldn't read target executable", { cause }); } const executableFormat = postject.getExecutableFormat(executable); @@ -155,8 +155,8 @@ async function inject(filename, resourceName, resourceData, options) { try { await fs.writeFile(filename, buffer); - } catch { - throw new Error("Couldn't write executable"); + } catch (cause) { + throw new Error("Couldn't write executable", { cause }); } } diff --git a/src/cli.js b/src/cli.js index d4deb2b..181e4c9 100755 --- a/src/cli.js +++ b/src/cli.js @@ -3,15 +3,25 @@ const program = require("commander"); const { constants, promises: fs } = require("fs"); const path = require("path"); +const { format } = require("util"); const { inject } = require("./api.js"); const logger = { info: (message) => console.log("\x1b[36m%s\x1b[0m", message), success: (message) => console.log("\x1b[32m%s\x1b[0m", message), error: (message) => console.log("\x1b[31mError: %s\x1b[0m", message), + verbose: () => {}, }; +function setupVerboseLogger() { + logger.error = (message) => console.log("\x1b[31mError: %s\x1b[0m", format(message)), + logger.verbose = (message) => console.log("\x1b[36m%s\x1b[0m", format(message)); +} + async function main(filename, resourceName, resource, options) { + if (options.verbose) { + setupVerboseLogger(); + } if (options.outputApiHeader) { // Handles --output-api-header. console.log( @@ -25,8 +35,9 @@ async function main(filename, resourceName, resource, options) { try { await fs.access(resource, constants.R_OK); resourceData = await fs.readFile(resource); - } catch { + } catch (err) { logger.error("Can't read resource file"); + logger.verbose(err); process.exit(1); } @@ -41,7 +52,7 @@ async function main(filename, resourceName, resource, options) { }); logger.success("💉 Injection done!"); } catch (err) { - logger.error(err.message); + logger.error(err); process.exit(1); } } @@ -70,6 +81,7 @@ if (require.main === module) { ) .option("--output-api-header", "Output the API header to stdout") .option("--overwrite", "Overwrite the resource if it already exists") + .option("--verbose", "Output verbose logs") .action(main) .parse(process.argv); } diff --git a/test/cli.mjs b/test/cli.mjs index 8197dfc..fb90550 100644 --- a/test/cli.mjs +++ b/test/cli.mjs @@ -123,6 +123,7 @@ describe("postject CLI", () => { "node", [ "./dist/cli.js", + "--verbose", "unknown-filename", "foobar", resourceFilename, @@ -134,6 +135,9 @@ describe("postject CLI", () => { expect(stdout).to.have.string( "Error: Can't read and write to target executable" ); + expect(stdout).to.have.string( + "Error: ENOENT: no such file or directory" + ); expect(stdout).to.not.have.string("Injection done!"); expect(status).to.equal(1); }