mirror of
https://github.com/denoland/deno.git
synced 2024-12-18 05:14:21 -05:00
877b38b370
**THIS PR HAS GIT CONFLICTS THAT MUST BE RESOLVED** This is the release commit being forwarded back to main for 1.33.4 Please ensure: - [x] Everything looks ok in the PR - [ ] The release has been published To make edits to this PR: ```shell git fetch upstream forward_v1.33.4 && git checkout -b forward_v1.33.4 upstream/forward_v1.33.4 ``` Don't need this PR? Close it. cc @levex Co-authored-by: levex <levex@users.noreply.github.com> Co-authored-by: Levente Kurusa <lkurusa@kernelstuff.org> |
||
---|---|---|
.. | ||
sym | ||
async.rs | ||
env.rs | ||
generated_symbol_exports_list_linux.def | ||
generated_symbol_exports_list_macos.def | ||
generated_symbol_exports_list_windows.def | ||
js_native_api.rs | ||
mod.rs | ||
README.md | ||
threadsafe_functions.rs | ||
util.rs |
napi
This directory contains source for Deno's Node-API implementation. It depends on
napi_sym
and deno_napi
.
async.rs
- Asyncronous work related functions.env.rs
- Environment related functions.js_native_api.rs
- V8/JS related functions.thread_safe_function.rs
- Thread safe function related functions.
Adding a new function
Add the symbol name to
cli/napi_sym/symbol_exports.json
.
{
"symbols": [
...
"napi_get_undefined",
- "napi_get_null"
+ "napi_get_null",
+ "napi_get_boolean"
]
}
Determine where to place the implementation. napi_get_boolean
is related to JS
values so we will place it in js_native_api.rs
. If something is not clear,
just create a new file module.
See napi_sym
for writing the implementation:
#[napi_sym::napi_sym]
pub fn napi_get_boolean(
env: *mut Env,
value: bool,
result: *mut napi_value,
) -> Result {
// ...
Ok(())
}
Update the generated symbol lists using the script:
deno run --allow-write tools/napi/generate_symbols_lists.js
Add a test in /test_napi
. You can also refer to Node.js
test suite for Node-API.
// test_napi/boolean_test.js
import { assertEquals, loadTestLibrary } from "./common.js";
const lib = loadTestLibrary();
Deno.test("napi get boolean", function () {
assertEquals(lib.test_get_boolean(true), true);
assertEquals(lib.test_get_boolean(false), false);
});
// test_napi/src/boolean.rs
use napi_sys::Status::napi_ok;
use napi_sys::ValueType::napi_boolean;
use napi_sys::*;
extern "C" fn test_boolean(
env: napi_env,
info: napi_callback_info,
) -> napi_value {
let (args, argc, _) = crate::get_callback_info!(env, info, 1);
assert_eq!(argc, 1);
let mut ty = -1;
assert!(unsafe { napi_typeof(env, args[0], &mut ty) } == napi_ok);
assert_eq!(ty, napi_boolean);
// Use napi_get_boolean here...
value
}
pub fn init(env: napi_env, exports: napi_value) {
let properties = &[crate::new_property!(env, "test_boolean\0", test_boolean)];
unsafe {
napi_define_properties(env, exports, properties.len(), properties.as_ptr())
};
}
// test_napi/src/lib.rs
+ mod boolean;
...
#[no_mangle]
unsafe extern "C" fn napi_register_module_v1(
env: napi_env,
exports: napi_value,
) -> napi_value {
...
+ boolean::init(env, exports);
exports
}
Run the test using cargo test -p test_napi
.