aboutsummaryrefslogtreecommitdiff
path: root/src/napi/napi.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/napi/napi.zig')
-rw-r--r--src/napi/napi.zig20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/napi/napi.zig b/src/napi/napi.zig
index 227a80d05..5f94dac90 100644
--- a/src/napi/napi.zig
+++ b/src/napi/napi.zig
@@ -219,11 +219,6 @@ pub export fn napi_get_boolean(_: napi_env, value: bool, result: *napi_value) na
result.* = JSValue.jsBoolean(value);
return .ok;
}
-pub export fn napi_create_object(env: napi_env, result: *napi_value) napi_status {
- log("napi_create_object", .{});
- result.* = JSValue.createEmptyObject(env, 0);
- return .ok;
-}
pub export fn napi_create_array(env: napi_env, result: *napi_value) napi_status {
log("napi_create_array", .{});
result.* = JSValue.c(JSC.C.JSObjectMakeArray(env.ref(), 0, null, null));
@@ -408,6 +403,7 @@ pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf
/// The result argument is optional unless buf is NULL.
pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf_ptr: [*c]u8, bufsize: usize, result_ptr: ?*usize) napi_status {
defer value.ensureStillAlive();
+
if (!value.isString()) {
return .string_expected;
}
@@ -653,6 +649,7 @@ pub extern fn napi_define_class(
pub extern fn napi_wrap(env: napi_env, js_object: napi_value, native_object: ?*anyopaque, finalize_cb: napi_finalize, finalize_hint: ?*anyopaque, result: [*]*Ref) napi_status;
pub extern fn napi_unwrap(env: napi_env, js_object: napi_value, result: [*]*anyopaque) napi_status;
pub extern fn napi_remove_wrap(env: napi_env, js_object: napi_value, result: [*]*anyopaque) napi_status;
+pub extern fn napi_create_object(env: napi_env, result: *napi_value) napi_status;
pub extern fn napi_create_external(env: napi_env, data: ?*anyopaque, finalize_cb: napi_finalize, finalize_hint: ?*anyopaque, result: *napi_value) napi_status;
pub extern fn napi_get_value_external(env: napi_env, value: napi_value, result: [*]*anyopaque) napi_status;
pub extern fn napi_create_reference(env: napi_env, value: napi_value, initial_refcount: u32, result: **Ref) napi_status;
@@ -1403,6 +1400,9 @@ pub const ThreadSafeFunction = struct {
var task = this.channel.tryReadItem() catch null orelse return;
switch (this.callback) {
.js => |js_function| {
+ if (js_function.isEmptyOrUndefinedOrNull()) {
+ return;
+ }
const err = js_function.call(this.env, &.{});
if (err.isAnyError()) {
this.env.bunVM().onUnhandledError(this.env, err);
@@ -1433,9 +1433,13 @@ pub const ThreadSafeFunction = struct {
}
if (this.callback == .js) {
- this.callback.js.unprotect();
+ if (!this.callback.js.isEmptyOrUndefinedOrNull()) {
+ this.callback.js.unprotect();
+ }
} else if (this.callback == .c) {
- this.callback.c.js.unprotect();
+ if (!this.callback.c.js.isEmptyOrUndefinedOrNull()) {
+ this.callback.c.js.unprotect();
+ }
}
bun.default_allocator.destroy(this);
}
@@ -1506,7 +1510,7 @@ pub export fn napi_create_threadsafe_function(
.js = if (func == .zero) JSC.JSValue.jsUndefined() else func,
},
} else .{
- .js = func,
+ .js = if (func == .zero) JSC.JSValue.jsUndefined() else func,
},
.ctx = context,
.channel = ThreadSafeFunction.Queue.init(max_queue_size, bun.default_allocator),