1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-11 10:07:54 -05:00
denoland-deno/cli/napi
denobot c2a61a4192
1.33.2 (#18988)
Bumped versions for 1.33.2

Please ensure:
- [x] Target branch is correct (`vX.XX` if a patch release, `main` if
minor)
- [x] Crate versions are bumped correctly
- [x] deno_std version is incremented in the code (see
`cli/deno_std.rs`)
- [ ] Releases.md is updated correctly (think relevancy and remove
reverts)

To make edits to this PR:
```shell
git fetch upstream release_1_33.2 && git checkout -b release_1_33.2 upstream/release_1_33.2
```

cc @levex

---------

Co-authored-by: levex <levex@users.noreply.github.com>
Co-authored-by: Levente Kurusa <lkurusa@kernelstuff.org>
2023-05-04 16:39:05 +02:00
..
sym 1.33.2 (#18988) 2023-05-04 16:39:05 +02:00
async.rs perf: use jemalloc as global allocator (#18957) 2023-05-04 16:19:14 +02:00
env.rs chore: upgrade to Rust 1.67 (#17548) 2023-01-27 10:43:16 -05:00
generated_symbol_exports_list_linux.def refactor: move generated_symbol_exports_list_* files to napi folder (#16822) 2022-11-25 18:49:02 -05:00
generated_symbol_exports_list_macos.def refactor: move generated_symbol_exports_list_* files to napi folder (#16822) 2022-11-25 18:49:02 -05:00
generated_symbol_exports_list_windows.def refactor: move generated_symbol_exports_list_* files to napi folder (#16822) 2022-11-25 18:49:02 -05:00
js_native_api.rs chore: update Rust to 1.68.0 (#18102) 2023-03-09 19:18:00 +00:00
mod.rs chore(napi): Remove unstable libuv methods (#17416) 2023-01-14 13:02:42 +00:00
README.md chore(napi): fix typo in README.md (#16414) 2022-10-25 12:18:02 -04:00
threadsafe_functions.rs fix(napi): Implement napi_threadsafe_function ref and unref (#17304) 2023-01-12 13:47:55 +01:00
util.rs chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00

napi

This directory contains source for Deno's Node-API implementation. It depends on napi_sym and deno_napi.

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.