diff options
author | 2023-01-17 17:10:42 -0800 | |
---|---|---|
committer | 2023-01-17 17:11:08 -0800 | |
commit | 9b260fb18b4b957674ad6cf284795c0ff2d8c7e7 (patch) | |
tree | 6f9c313f606e8d84dccc8b74c43a0d90e39eb4ff | |
parent | b931c19ba3793b1d62fffff735b1d29e62d4c89c (diff) | |
download | bun-9b260fb18b4b957674ad6cf284795c0ff2d8c7e7.tar.gz bun-9b260fb18b4b957674ad6cf284795c0ff2d8c7e7.tar.zst bun-9b260fb18b4b957674ad6cf284795c0ff2d8c7e7.zip |
Allow error instance in process.emitWarning
-rw-r--r-- | packages/bun-types/globals.d.ts | 8 | ||||
-rw-r--r-- | src/bun.js/bindings/Process.cpp | 17 |
2 files changed, 20 insertions, 5 deletions
diff --git a/packages/bun-types/globals.d.ts b/packages/bun-types/globals.d.ts index 8cf57b05a..5718f62e4 100644 --- a/packages/bun-types/globals.d.ts +++ b/packages/bun-types/globals.d.ts @@ -318,7 +318,9 @@ interface EncodeIntoResult { interface Process { /** - * The current version of Bun + * A Node.js LTS version + * + * To see the current Bun version, use {@link Bun.version} */ version: string; /** @@ -391,6 +393,10 @@ interface Process { * @returns Bun process's file mode creation mask. */ umask(mask?: number): number; + + emitWarning(warning: string | Error /*name?: string, ctor?: Function*/): void; + + readonly config: Object; } declare var process: Process; diff --git a/src/bun.js/bindings/Process.cpp b/src/bun.js/bindings/Process.cpp index 69025f373..085010e06 100644 --- a/src/bun.js/bindings/Process.cpp +++ b/src/bun.js/bindings/Process.cpp @@ -531,21 +531,30 @@ JSC_DEFINE_HOST_FUNCTION(Process_emitWarning, (JSGlobalObject * lexicalGlobalObj return JSValue::encode(jsUndefined()); } - auto jsArgs = JSValue::encode(callFrame->uncheckedArgument(0)); - RETURN_IF_EXCEPTION(scope, encodedJSValue()); auto* process = jsCast<Process*>(globalObject->processObject()); + auto getError = [&]() -> JSValue { + JSValue arg0 = callFrame->uncheckedArgument(0); + if (!arg0.isEmpty() && arg0.isCell() && arg0.asCell()->type() == ErrorInstanceType) { + return arg0; + } + + WTF::String str = arg0.toWTFString(globalObject); + return createError(globalObject, str); + }; + auto ident = Identifier::fromString(vm, "warning"_s); if (process->wrapped().hasEventListeners(ident)) { - WTF::String str = callFrame->uncheckedArgument(0).toWTFString(globalObject); JSC::MarkedArgumentBuffer args; - args.append(createError(globalObject, str)); + args.append(getError()); + process->wrapped().emit(ident, args); return JSValue::encode(jsUndefined()); } + auto jsArgs = JSValue::encode(getError()); Zig__ConsoleClient__messageWithTypeAndLevel(reinterpret_cast<Zig::ConsoleClient*>(globalObject->consoleClient().get())->m_client, static_cast<uint32_t>(MessageType::Log), static_cast<uint32_t>(MessageLevel::Warning), globalObject, &jsArgs, 1); return JSValue::encode(jsUndefined()); |