Skip to content

Commit e48ffa8

Browse files
committed
fix
1 parent 2a71a18 commit e48ffa8

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

crates/rspack_napi/src/js_values/js_reg_exp.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::fmt::Debug;
22

33
use napi::{
4-
bindgen_prelude::{FromNapiValue, Function, TypeName, ValidateNapiValue},
5-
sys, Env, Error, JsObject, JsUnknown, NapiRaw, NapiValue, Result, Status,
4+
bindgen_prelude::{FromNapiValue, TypeName, ValidateNapiValue},
5+
sys, Env, Error, JsFunction, JsObject, NapiRaw, NapiValue, Result, Status,
66
};
77

88
pub struct JsRegExp(JsObject);
@@ -53,16 +53,25 @@ impl FromNapiValue for JsRegExp {
5353

5454
let env = Env::from(env);
5555
let global = env.get_global()?;
56-
let regexp_constructor = global.get_named_property::<Function<JsUnknown, ()>>("RegExp")?;
56+
let object_prototype_to_string = global
57+
.get_named_property_unchecked::<JsObject>("Object")?
58+
.get_named_property::<JsObject>("prototype")?
59+
.get_named_property::<JsFunction>("toString")?;
5760

58-
if js_object.instanceof(regexp_constructor)? {
61+
let js_string = object_prototype_to_string
62+
.call_without_args(Some(&js_object))?
63+
.coerce_to_string()?
64+
.into_utf8()?;
65+
let js_object_type = js_string.as_str()?;
66+
67+
if js_object_type == "[object RegExp]" {
5968
Ok(Self(js_object))
6069
} else {
6170
Err(Error::new(
6271
Status::ObjectExpected,
6372
format!(
6473
"Expect value to be '[object RegExp]', but received {}",
65-
js_object.coerce_to_string()?.into_utf8()?.as_str()?
74+
js_object_type
6675
),
6776
))
6877
}

0 commit comments

Comments
 (0)