mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 02:48:24 +00:00
refactor: create util folder, move nap_sym to napi/sym, move http_cache to cache folder (#16857)
This commit is contained in:
parent
f526513d74
commit
2d4c46c975
57 changed files with 940 additions and 920 deletions
22
cli/napi/sym/Cargo.toml
Normal file
22
cli/napi/sym/Cargo.toml
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
[package]
|
||||
name = "napi_sym"
|
||||
version = "0.9.0"
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
readme = "README.md"
|
||||
repository.workspace = true
|
||||
description = "proc macro for writing N-API symbols"
|
||||
|
||||
[lib]
|
||||
path = "./lib.rs"
|
||||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
proc-macro2.workspace = true
|
||||
quote.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
syn.workspace = true
|
34
cli/napi/sym/README.md
Normal file
34
cli/napi/sym/README.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
# napi_sym
|
||||
|
||||
A proc_macro for Deno's Node-API implementation. It does the following things:
|
||||
|
||||
- Marks the symbol as `#[no_mangle]` and rewrites it as `pub extern "C" $name`.
|
||||
- Asserts that the function symbol is present in
|
||||
[`symbol_exports.json`](./symbol_exports.json).
|
||||
- Maps `deno_napi::Result` to raw `napi_result`.
|
||||
|
||||
```rust
|
||||
use deno_napi::{napi_value, Env, Error, Result};
|
||||
|
||||
#[napi_sym::napi_sym]
|
||||
fn napi_get_boolean(
|
||||
env: *mut Env,
|
||||
value: bool,
|
||||
result: *mut napi_value,
|
||||
) -> Result {
|
||||
let _env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?;
|
||||
// *result = ...
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
### `symbol_exports.json`
|
||||
|
||||
A file containing the symbols that need to be put into the executable's dynamic
|
||||
symbol table at link-time.
|
||||
|
||||
This is done using `/DEF:` on Windows, `-exported_symbol,_` on macOS and
|
||||
`--export-dynamic-symbol=` on Linux. See [`cli/build.rs`](../build.rs).
|
||||
|
||||
On Windows, you need to generate the `.def` file by running
|
||||
[`tools/napi/generate_symbols_lists.js`](../../tools/napi/generate_symbols_lists.js).
|
46
cli/napi/sym/lib.rs
Normal file
46
cli/napi/sym/lib.rs
Normal file
|
@ -0,0 +1,46 @@
|
|||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use serde::Deserialize;
|
||||
|
||||
static NAPI_EXPORTS: &str = include_str!("./symbol_exports.json");
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct SymbolExports {
|
||||
pub symbols: Vec<String>,
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn napi_sym(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let func = syn::parse::<syn::ItemFn>(item).expect("expected a function");
|
||||
|
||||
let exports: SymbolExports =
|
||||
serde_json::from_str(NAPI_EXPORTS).expect("failed to parse exports");
|
||||
let name = &func.sig.ident;
|
||||
assert!(
|
||||
exports.symbols.contains(&name.to_string()),
|
||||
"tools/napi/sym/symbol_exports.json is out of sync!"
|
||||
);
|
||||
|
||||
let block = &func.block;
|
||||
let inputs = &func.sig.inputs;
|
||||
let output = &func.sig.output;
|
||||
let generics = &func.sig.generics;
|
||||
let ret_ty = match output {
|
||||
syn::ReturnType::Default => panic!("expected a return type"),
|
||||
syn::ReturnType::Type(_, ty) => quote! { #ty },
|
||||
};
|
||||
TokenStream::from(quote! {
|
||||
// SAFETY: it's an NAPI function.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn #name #generics (#inputs) -> napi_status {
|
||||
let mut inner = || -> #ret_ty {
|
||||
#block
|
||||
};
|
||||
inner()
|
||||
.map(|_| napi_ok)
|
||||
.unwrap_or_else(|e| e.into())
|
||||
}
|
||||
})
|
||||
}
|
148
cli/napi/sym/symbol_exports.json
Normal file
148
cli/napi/sym/symbol_exports.json
Normal file
|
@ -0,0 +1,148 @@
|
|||
{
|
||||
"symbols": [
|
||||
"node_api_create_syntax_error",
|
||||
"napi_make_callback",
|
||||
"napi_has_named_property",
|
||||
"napi_async_destroy",
|
||||
"napi_coerce_to_object",
|
||||
"napi_get_arraybuffer_info",
|
||||
"napi_detach_arraybuffer",
|
||||
"napi_get_undefined",
|
||||
"napi_reference_unref",
|
||||
"napi_fatal_error",
|
||||
"napi_open_callback_scope",
|
||||
"napi_close_callback_scope",
|
||||
"napi_get_value_uint32",
|
||||
"napi_create_function",
|
||||
"napi_create_arraybuffer",
|
||||
"napi_get_value_int64",
|
||||
"napi_get_all_property_names",
|
||||
"napi_resolve_deferred",
|
||||
"napi_is_detached_arraybuffer",
|
||||
"napi_create_string_utf8",
|
||||
"napi_create_threadsafe_function",
|
||||
"node_api_throw_syntax_error",
|
||||
"napi_create_bigint_int64",
|
||||
"napi_wrap",
|
||||
"napi_set_property",
|
||||
"napi_get_value_bigint_int64",
|
||||
"napi_open_handle_scope",
|
||||
"napi_create_error",
|
||||
"napi_create_buffer",
|
||||
"napi_cancel_async_work",
|
||||
"napi_is_exception_pending",
|
||||
"napi_acquire_threadsafe_function",
|
||||
"napi_create_external",
|
||||
"napi_get_threadsafe_function_context",
|
||||
"napi_get_null",
|
||||
"napi_create_string_utf16",
|
||||
"napi_get_value_bigint_uint64",
|
||||
"napi_module_register",
|
||||
"napi_is_typedarray",
|
||||
"napi_create_external_buffer",
|
||||
"napi_get_new_target",
|
||||
"napi_get_instance_data",
|
||||
"napi_close_handle_scope",
|
||||
"napi_get_value_string_utf16",
|
||||
"napi_get_property_names",
|
||||
"napi_is_arraybuffer",
|
||||
"napi_get_cb_info",
|
||||
"napi_define_properties",
|
||||
"napi_add_env_cleanup_hook",
|
||||
"node_api_get_module_file_name",
|
||||
"napi_get_node_version",
|
||||
"napi_create_int64",
|
||||
"napi_create_double",
|
||||
"napi_get_and_clear_last_exception",
|
||||
"napi_create_reference",
|
||||
"napi_get_typedarray_info",
|
||||
"napi_call_threadsafe_function",
|
||||
"napi_get_last_error_info",
|
||||
"napi_create_array_with_length",
|
||||
"napi_coerce_to_number",
|
||||
"napi_get_global",
|
||||
"napi_is_error",
|
||||
"napi_set_instance_data",
|
||||
"napi_create_typedarray",
|
||||
"napi_throw_type_error",
|
||||
"napi_has_property",
|
||||
"napi_get_value_external",
|
||||
"napi_create_range_error",
|
||||
"napi_typeof",
|
||||
"napi_ref_threadsafe_function",
|
||||
"napi_create_bigint_uint64",
|
||||
"napi_get_prototype",
|
||||
"napi_adjust_external_memory",
|
||||
"napi_release_threadsafe_function",
|
||||
"napi_delete_async_work",
|
||||
"napi_create_string_latin1",
|
||||
"napi_is_array",
|
||||
"napi_unref_threadsafe_function",
|
||||
"napi_throw_error",
|
||||
"napi_has_own_property",
|
||||
"napi_get_reference_value",
|
||||
"napi_remove_env_cleanup_hook",
|
||||
"napi_get_value_string_utf8",
|
||||
"napi_is_promise",
|
||||
"napi_get_boolean",
|
||||
"napi_run_script",
|
||||
"napi_get_element",
|
||||
"napi_get_named_property",
|
||||
"napi_get_buffer_info",
|
||||
"napi_get_value_bool",
|
||||
"napi_reference_ref",
|
||||
"napi_create_object",
|
||||
"napi_create_promise",
|
||||
"napi_create_int32",
|
||||
"napi_escape_handle",
|
||||
"napi_open_escapable_handle_scope",
|
||||
"napi_throw",
|
||||
"napi_get_value_double",
|
||||
"napi_set_named_property",
|
||||
"napi_call_function",
|
||||
"napi_create_date",
|
||||
"napi_object_freeze",
|
||||
"napi_get_uv_event_loop",
|
||||
"napi_get_value_string_latin1",
|
||||
"napi_reject_deferred",
|
||||
"napi_add_finalizer",
|
||||
"napi_create_array",
|
||||
"napi_delete_reference",
|
||||
"napi_get_date_value",
|
||||
"napi_create_dataview",
|
||||
"napi_get_version",
|
||||
"napi_define_class",
|
||||
"napi_is_date",
|
||||
"napi_remove_wrap",
|
||||
"napi_delete_property",
|
||||
"napi_instanceof",
|
||||
"napi_create_buffer_copy",
|
||||
"napi_delete_element",
|
||||
"napi_object_seal",
|
||||
"napi_queue_async_work",
|
||||
"napi_get_value_bigint_words",
|
||||
"napi_is_buffer",
|
||||
"napi_get_array_length",
|
||||
"napi_get_property",
|
||||
"napi_new_instance",
|
||||
"napi_set_element",
|
||||
"napi_create_bigint_words",
|
||||
"napi_strict_equals",
|
||||
"napi_is_dataview",
|
||||
"napi_close_escapable_handle_scope",
|
||||
"napi_get_dataview_info",
|
||||
"napi_get_value_int32",
|
||||
"napi_unwrap",
|
||||
"napi_throw_range_error",
|
||||
"napi_coerce_to_bool",
|
||||
"napi_create_uint32",
|
||||
"napi_has_element",
|
||||
"napi_create_external_arraybuffer",
|
||||
"napi_create_symbol",
|
||||
"napi_coerce_to_string",
|
||||
"napi_create_type_error",
|
||||
"napi_fatal_exception",
|
||||
"napi_create_async_work",
|
||||
"napi_async_init"
|
||||
]
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue