aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/bun-types/globals.d.ts8
-rw-r--r--src/bun.js/bindings/Process.cpp17
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());