summaryrefslogtreecommitdiff
path: root/cli/napi/js_native_api.rs
diff options
context:
space:
mode:
authorLongYinan <lynweklm@gmail.com>2024-10-17 18:44:51 +0800
committerGitHub <noreply@github.com>2024-10-17 12:44:51 +0200
commit56895858885297537204a16dd463f28b73d25551 (patch)
treed8db9f6e05ea40dc01998800be8ee7fcd6d9d8d1 /cli/napi/js_native_api.rs
parenta61ba3c6995bef58f508a34e537932284692c294 (diff)
fix(cli): set napi object property properly (#26344)
<!-- Before submitting a PR, please read https://docs.deno.com/runtime/manual/references/contributing 1. Give the PR a descriptive title. Examples of good title: - fix(std/http): Fix race condition in server - docs(console): Update docstrings - feat(doc): Handle nested reexports Examples of bad title: - fix #7123 - update docs - fix bugs 2. Ensure there is a related issue and it is referenced in the PR text. 3. Ensure there are tests that cover the changes. 4. Ensure `cargo test` passes. 5. Ensure `./tools/format.js` passes without changing files. 6. Ensure `./tools/lint.js` passes. 7. Open as a draft PR if your work is still in progress. The CI won't run all steps, but you can add '[ci]' to a commit message to force it to. 8. If you would like to run the benchmarks on the CI, add the 'ci-bench' label. -->
Diffstat (limited to 'cli/napi/js_native_api.rs')
-rw-r--r--cli/napi/js_native_api.rs29
1 files changed, 16 insertions, 13 deletions
diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs
index 1d2c99c2c..35e7690c3 100644
--- a/cli/napi/js_native_api.rs
+++ b/cli/napi/js_native_api.rs
@@ -264,6 +264,16 @@ fn napi_define_class<'s>(
Err(status) => return status,
};
+ let mut accessor_property = v8::PropertyAttribute::NONE;
+
+ if p.attributes & napi_enumerable == 0 {
+ accessor_property = accessor_property | v8::PropertyAttribute::DONT_ENUM;
+ }
+ if p.attributes & napi_configurable == 0 {
+ accessor_property =
+ accessor_property | v8::PropertyAttribute::DONT_DELETE;
+ }
+
if p.getter.is_some() || p.setter.is_some() {
let getter = p.getter.map(|g| {
create_function_template(&mut env.scope(), env_ptr, None, g, p.data)
@@ -271,8 +281,6 @@ fn napi_define_class<'s>(
let setter = p.setter.map(|s| {
create_function_template(&mut env.scope(), env_ptr, None, s, p.data)
});
-
- let mut accessor_property = v8::PropertyAttribute::NONE;
if getter.is_some()
&& setter.is_some()
&& (p.attributes & napi_writable) == 0
@@ -280,15 +288,6 @@ fn napi_define_class<'s>(
accessor_property =
accessor_property | v8::PropertyAttribute::READ_ONLY;
}
- if p.attributes & napi_enumerable == 0 {
- accessor_property =
- accessor_property | v8::PropertyAttribute::DONT_ENUM;
- }
- if p.attributes & napi_configurable == 0 {
- accessor_property =
- accessor_property | v8::PropertyAttribute::DONT_DELETE;
- }
-
let proto = tpl.prototype_template(&mut env.scope());
proto.set_accessor_property(name, getter, setter, accessor_property);
} else if let Some(method) = p.method {
@@ -300,10 +299,14 @@ fn napi_define_class<'s>(
p.data,
);
let proto = tpl.prototype_template(&mut env.scope());
- proto.set(name, function.into());
+ proto.set_with_attr(name, function.into(), accessor_property);
} else {
let proto = tpl.prototype_template(&mut env.scope());
- proto.set(name, p.value.unwrap().into());
+ if (p.attributes & napi_writable) == 0 {
+ accessor_property =
+ accessor_property | v8::PropertyAttribute::READ_ONLY;
+ }
+ proto.set_with_attr(name, p.value.unwrap().into(), accessor_property);
}
}