aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/bindings/napi.cpp2
-rw-r--r--src/napi/napi.zig79
-rw-r--r--src/symbols.dyn9
-rw-r--r--src/symbols.txt9
4 files changed, 92 insertions, 7 deletions
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp
index 96489f081..c39dbd413 100644
--- a/src/bun.js/bindings/napi.cpp
+++ b/src/bun.js/bindings/napi.cpp
@@ -1537,4 +1537,4 @@ extern "C" napi_status napi_create_bigint_words(napi_env env,
*result = toNapi(bigint);
return napi_ok;
-} \ No newline at end of file
+}
diff --git a/src/napi/napi.zig b/src/napi/napi.zig
index 8bb84b831..bff63f63b 100644
--- a/src/napi/napi.zig
+++ b/src/napi/napi.zig
@@ -47,7 +47,7 @@ pub const Ref = opaque {
extern fn napi_set_ref(ref: *Ref, value: JSC.JSValue) void;
};
pub const napi_handle_scope = napi_env;
-pub const napi_escapable_handle_scope = struct_napi_escapable_handle_scope__;
+pub const napi_escapable_handle_scope = *struct_napi_escapable_handle_scope__;
pub const napi_callback_info = *JSC.CallFrame;
pub const napi_deferred = *JSC.JSPromise;
@@ -284,6 +284,7 @@ pub export fn napi_create_error(env: napi_env, code: napi_value, msg: napi_value
result.* = system_error.toErrorInstance(env);
return .ok;
}
+
pub extern fn napi_create_type_error(env: napi_env, code: napi_value, msg: napi_value, result: *napi_value) napi_status;
pub extern fn napi_create_range_error(env: napi_env, code: napi_value, msg: napi_value, result: *napi_value) napi_status;
pub export fn napi_typeof(env: napi_env, value: napi_value, result: *napi_valuetype) napi_status {
@@ -703,9 +704,66 @@ pub export fn napi_open_handle_scope(env: napi_env, result: *napi_handle_scope)
pub export fn napi_close_handle_scope(_: napi_env, _: napi_handle_scope) napi_status {
return .ok;
}
-pub extern fn napi_open_escapable_handle_scope(env: napi_env, result: [*c]napi_escapable_handle_scope) napi_status;
-pub extern fn napi_close_escapable_handle_scope(env: napi_env, scope: napi_escapable_handle_scope) napi_status;
-pub extern fn napi_escape_handle(env: napi_env, scope: napi_escapable_handle_scope, escapee: napi_value, result: *napi_value) napi_status;
+
+pub export fn napi_async_init(_: napi_env, _: napi_value, _: *anyopaque, _: **anyopaque) napi_status {
+ notImplementedYet("napi_async_init");
+ return .generic_failure;
+}
+
+pub export fn napi_async_destroy(_: napi_env, _: *anyopaque) napi_status {
+ notImplementedYet("napi_async_destroy");
+ return .generic_failure;
+}
+
+pub export fn napi_make_callback(_: napi_env, _: *anyopaque, _: napi_value, _: napi_value, _: usize, _: ?[*]const napi_value, _: *napi_value) napi_status {
+ notImplementedYet("napi_make_callback");
+ return .generic_failure;
+}
+
+// Sometimes shared libraries reference symbols which are not used
+// We don't want to fail to load the library because of that
+// so we instead return an error and warn the user
+fn notImplementedYet(comptime name: []const u8) void {
+ bun.once(
+ struct {
+ pub fn warn() void {
+ if (JSC.VirtualMachine.get().log.level.atLeast(.warn)) {
+ bun.Output.prettyErrorln("<r><yellow>warning<r><d>:<r> Node-API function <b>\"{s}\"<r> is not implemented yet.\n Track the status of Node-API in Bun: https://github.com/oven-sh/bun/issues/158", .{name});
+ bun.Output.flush();
+ }
+ }
+ }.warn,
+ void,
+ );
+}
+
+// TODO:
+pub export fn napi_open_escapable_handle_scope(_: napi_env, _: [*c]napi_escapable_handle_scope) napi_status {
+ notImplementedYet("napi_open_escapable_handle_scope");
+ return .generic_failure;
+}
+// TODO:
+pub export fn napi_close_escapable_handle_scope(_: napi_env, _: napi_escapable_handle_scope) napi_status {
+ notImplementedYet("napi_close_escapable_handle_scope");
+ return .generic_failure;
+}
+pub export fn napi_escape_handle(_: napi_env, _: napi_escapable_handle_scope, _: napi_value, _: *napi_value) napi_status {
+ notImplementedYet("napi_escape_handle");
+ return .generic_failure;
+}
+pub export fn napi_type_tag_object(_: napi_env, _: napi_value, _: [*c]const napi_type_tag) napi_status {
+ notImplementedYet("napi_type_tag_object");
+ return .generic_failure;
+}
+pub export fn napi_check_object_type_tag(_: napi_env, _: napi_value, _: [*c]const napi_type_tag, _: *bool) napi_status {
+ notImplementedYet("napi_check_object_type_tag");
+ return .generic_failure;
+}
+pub export fn napi_open_callback_scope(_: napi_env, _: napi_value, _: *anyopaque, _: *anyopaque) napi_status {
+ notImplementedYet("napi_open_callback_scope");
+ return .generic_failure;
+}
+
pub extern fn napi_throw(env: napi_env, @"error": napi_value) napi_status;
pub extern fn napi_throw_error(env: napi_env, code: [*c]const u8, msg: [*c]const u8) napi_status;
pub extern fn napi_throw_type_error(env: napi_env, code: [*c]const u8, msg: [*c]const u8) napi_status;
@@ -890,14 +948,14 @@ pub export fn napi_get_value_bigint_uint64(_: napi_env, value: napi_value, resul
result.* = value.toUInt64NoTruncate();
return .ok;
}
+
pub extern fn napi_get_value_bigint_words(env: napi_env, value: napi_value, sign_bit: [*c]c_int, word_count: [*c]usize, words: [*c]u64) napi_status;
pub extern fn napi_get_all_property_names(env: napi_env, object: napi_value, key_mode: napi_key_collection_mode, key_filter: napi_key_filter, key_conversion: napi_key_conversion, result: *napi_value) napi_status;
pub extern fn napi_set_instance_data(env: napi_env, data: ?*anyopaque, finalize_cb: napi_finalize, finalize_hint: ?*anyopaque) napi_status;
pub extern fn napi_get_instance_data(env: napi_env, data: [*]*anyopaque) napi_status;
pub extern fn napi_detach_arraybuffer(env: napi_env, arraybuffer: napi_value) napi_status;
pub extern fn napi_is_detached_arraybuffer(env: napi_env, value: napi_value, result: *bool) napi_status;
-pub extern fn napi_type_tag_object(env: napi_env, value: napi_value, type_tag: [*c]const napi_type_tag) napi_status;
-pub extern fn napi_check_object_type_tag(env: napi_env, value: napi_value, type_tag: [*c]const napi_type_tag, result: *bool) napi_status;
+
pub const struct_napi_async_work__ = opaque {};
const WorkPool = @import("../work_pool.zig").WorkPool;
const WorkPoolTask = @import("../work_pool.zig").Task;
@@ -1528,6 +1586,15 @@ pub fn fixDeadCodeElimination() void {
std.mem.doNotOptimizeAway(&napi_get_instance_data);
std.mem.doNotOptimizeAway(&napi_set_instance_data);
std.mem.doNotOptimizeAway(&napi_create_bigint_words);
+ std.mem.doNotOptimizeAway(&napi_async_init);
+ std.mem.doNotOptimizeAway(&napi_async_destroy);
+ std.mem.doNotOptimizeAway(&napi_make_callback);
+ std.mem.doNotOptimizeAway(&napi_open_escapable_handle_scope);
+ std.mem.doNotOptimizeAway(&napi_close_escapable_handle_scope);
+ std.mem.doNotOptimizeAway(&napi_escape_handle);
+ std.mem.doNotOptimizeAway(&napi_type_tag_object);
+ std.mem.doNotOptimizeAway(&napi_check_object_type_tag);
+ std.mem.doNotOptimizeAway(&napi_open_callback_scope);
std.mem.doNotOptimizeAway(&@import("../bun.js/node/buffer.zig").BufferVectorized.fill);
}
diff --git a/src/symbols.dyn b/src/symbols.dyn
index e0b4b2489..8755a4969 100644
--- a/src/symbols.dyn
+++ b/src/symbols.dyn
@@ -4,9 +4,13 @@
_napi_add_env_cleanup_hook;
_napi_add_finalizer;
_napi_adjust_external_memory;
+ _napi_async_destroy;
+ _napi_async_init;
_napi_call_function;
_napi_call_threadsafe_function;
_napi_cancel_async_work;
+ _napi_check_object_type_tag;
+ _napi_close_escapable_handle_scope;
_napi_close_handle_scope;
_napi_coerce_to_bool;
_napi_coerce_to_number;
@@ -49,6 +53,7 @@
_napi_delete_property;
_napi_delete_reference;
_napi_detach_arraybuffer;
+ _napi_escape_handle;
_napi_fatal_error;
_napi_get_all_property_names;
_napi_get_and_clear_last_exception;
@@ -101,10 +106,13 @@
_napi_is_exception_pending;
_napi_is_promise;
_napi_is_typedarray;
+ _napi_make_callback;
_napi_module_register;
_napi_new_instance;
_napi_object_freeze;
_napi_object_seal;
+ _napi_open_callback_scope;
+ _napi_open_escapable_handle_scope;
_napi_open_handle_scope;
_napi_queue_async_work;
_napi_ref_threadsafe_function;
@@ -125,6 +133,7 @@
_napi_throw_error;
_napi_throw_range_error;
_napi_throw_type_error;
+ _napi_type_tag_object;
_napi_typeof;
_napi_unref_threadsafe_function;
_napi_unwrap;
diff --git a/src/symbols.txt b/src/symbols.txt
index 24ae8ee38..4ba7d7ef9 100644
--- a/src/symbols.txt
+++ b/src/symbols.txt
@@ -3,9 +3,13 @@ _napi_add_async_cleanup_hook
_napi_add_env_cleanup_hook
_napi_add_finalizer
_napi_adjust_external_memory
+_napi_async_destroy
+_napi_async_init
_napi_call_function
_napi_call_threadsafe_function
_napi_cancel_async_work
+_napi_check_object_type_tag
+_napi_close_escapable_handle_scope
_napi_close_handle_scope
_napi_coerce_to_bool
_napi_coerce_to_number
@@ -48,6 +52,7 @@ _napi_delete_async_work
_napi_delete_property
_napi_delete_reference
_napi_detach_arraybuffer
+_napi_escape_handle
_napi_fatal_error
_napi_get_all_property_names
_napi_get_and_clear_last_exception
@@ -100,10 +105,13 @@ _napi_is_error
_napi_is_exception_pending
_napi_is_promise
_napi_is_typedarray
+_napi_make_callback
_napi_module_register
_napi_new_instance
_napi_object_freeze
_napi_object_seal
+_napi_open_callback_scope
+_napi_open_escapable_handle_scope
_napi_open_handle_scope
_napi_queue_async_work
_napi_ref_threadsafe_function
@@ -124,6 +132,7 @@ _napi_throw
_napi_throw_error
_napi_throw_range_error
_napi_throw_type_error
+_napi_type_tag_object
_napi_typeof
_napi_unref_threadsafe_function
_napi_unwrap