From d42c032eeccbb427e9d5cf6f64c492f581285338 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 26 Sep 2024 14:20:35 -0700 Subject: [PATCH] cleanup some error handling in BunProcess (#14178) --- src/bun.js/bindings/BunProcess.cpp | 25 +++++++++---------------- test/js/node/process/process.test.js | 2 +- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/bun.js/bindings/BunProcess.cpp b/src/bun.js/bindings/BunProcess.cpp index 354036653d2814..9115a9ba259dac 100644 --- a/src/bun.js/bindings/BunProcess.cpp +++ b/src/bun.js/bindings/BunProcess.cpp @@ -32,6 +32,7 @@ #include "wtf/text/OrdinalNumber.h" #include "AsyncContextFrame.h" +#include "ErrorCode.h" #include "napi_handle_scope.h" @@ -442,24 +443,18 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionUmask, JSValue numberValue = callFrame->argument(0); if (!numberValue.isNumber()) { - throwTypeError(globalObject, throwScope, "The \"mask\" argument must be a number"_s); - return {}; + return Bun::ERR::INVALID_ARG_TYPE(throwScope, globalObject, "mask"_s, "number"_s, numberValue); } if (!numberValue.isAnyInt()) { - throwNodeRangeError(globalObject, throwScope, "The \"mask\" argument must be an integer"_s); - return {}; + return Bun::ERR::OUT_OF_RANGE(throwScope, globalObject, "mask"_s, "an integer"_s, numberValue); } double number = numberValue.toNumber(globalObject); int64_t newUmask = isInt52(number) ? tryConvertToInt52(number) : numberValue.toInt32(globalObject); RETURN_IF_EXCEPTION(throwScope, JSC::JSValue::encode(JSC::JSValue {})); if (newUmask < 0 || newUmask > 4294967295) { - StringBuilder messageBuilder; - messageBuilder.append("The \"mask\" value must be in range [0, 4294967295]. Received value: "_s); - messageBuilder.append(int52ToString(vm, newUmask, 10)->getString(globalObject)); - throwNodeRangeError(globalObject, throwScope, messageBuilder.toString()); - return {}; + return Bun::ERR::OUT_OF_RANGE(throwScope, globalObject, "mask"_s, 0, 4294967295, numberValue); } return JSC::JSValue::encode(JSC::jsNumber(umask(newUmask))); @@ -2895,11 +2890,11 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionKill, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) { auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); - int pid = callFrame->argument(0).toInt32(globalObject); + auto pid_value = callFrame->argument(0); + int pid = pid_value.toInt32(globalObject); RETURN_IF_EXCEPTION(scope, {}); if (pid < 0) { - throwNodeRangeError(globalObject, scope, "pid must be a positive integer"_s); - return {}; + return Bun::ERR::OUT_OF_RANGE(scope, globalObject, "pid"_s, "a positive integer"_s, pid_value); } JSC::JSValue signalValue = callFrame->argument(1); int signal = SIGTERM; @@ -2912,13 +2907,11 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionKill, signal = num; RETURN_IF_EXCEPTION(scope, {}); } else { - throwNodeRangeError(globalObject, scope, "Unknown signal name"_s); - return {}; + return Bun::ERR::UNKNOWN_SIGNAL(scope, globalObject, signalValue); } RETURN_IF_EXCEPTION(scope, {}); } else if (!signalValue.isUndefinedOrNull()) { - throwTypeError(globalObject, scope, "signal must be a string or number"_s); - return {}; + return Bun::ERR::INVALID_ARG_TYPE(scope, globalObject, "signal"_s, "string or number"_s, signalValue); } auto global = jsCast(globalObject); diff --git a/test/js/node/process/process.test.js b/test/js/node/process/process.test.js index ad12285d4b87e7..241e293956dcfa 100644 --- a/test/js/node/process/process.test.js +++ b/test/js/node/process/process.test.js @@ -234,7 +234,7 @@ it("process.umask()", () => { for (let notNumber of notNumbers) { expect(() => { process.umask(notNumber); - }).toThrow('The "mask" argument must be a number'); + }).toThrow('The "mask" argument must be of type number'); } let rangeErrors = [NaN, -1.4, Infinity, -Infinity, -1, 1.3, 4294967296];