1
1
use napi:: {
2
2
bindgen_prelude:: {
3
- FromNapiValue , Function , JsObjectValue , Object , ToNapiValue , TypeName , Undefined ,
4
- ValidateNapiValue ,
3
+ FromNapiValue , Function , JsObjectValue , ToNapiValue , TypeName , ValidateNapiValue ,
5
4
} ,
6
- Env , JsValue , Unknown ,
5
+ Env , JsValue , Unknown , ValueType ,
7
6
} ;
8
7
9
8
use crate :: RspackRegex ;
@@ -25,32 +24,27 @@ impl FromNapiValue for RspackRegex {
25
24
raw_env : napi:: sys:: napi_env ,
26
25
napi_val : napi:: sys:: napi_value ,
27
26
) -> napi:: Result < Self > {
28
- let js_object = Object :: from_raw ( raw_env, napi_val) ;
27
+ let unknown = Unknown :: from_raw_unchecked ( raw_env, napi_val) ;
29
28
30
- let env = Env :: from ( raw_env) ;
31
- let global = env. get_global ( ) ?;
32
- let object_prototype_to_string = global
33
- . get_named_property_unchecked :: < Object > ( "Object" ) ?
34
- . get_named_property_unchecked :: < Object > ( "prototype" ) ?
35
- . get_named_property_unchecked :: < Function > ( "toString" ) ?;
36
-
37
- let raw_undefined = Undefined :: to_napi_value ( raw_env, ( ) ) ?;
38
- let undefined = Unknown :: from_napi_value ( raw_env, raw_undefined) ?;
39
- let js_value = object_prototype_to_string. apply ( js_object, undefined) ?;
40
- let js_string = js_value. coerce_to_string ( ) ?;
41
- let js_utf8_string = js_string. into_utf8 ( ) ?;
42
- let object_type = js_utf8_string. as_str ( ) ?;
43
-
44
- if object_type == "[object RegExp]" {
45
- let source = js_object. get_named_property :: < String > ( "source" ) ?;
46
- let flags = js_object. get_named_property :: < String > ( "flags" ) ?;
29
+ if unknown. get_type ( ) ? == ValueType :: Object {
30
+ let object = unknown. coerce_to_object ( ) ?;
31
+ let source = object. get_named_property :: < String > ( "source" ) . map_err ( |_| {
32
+ napi:: Error :: from_reason (
33
+ "Failed to extract the 'source' property. Ensure the value is a valid RegExp object." ,
34
+ )
35
+ } ) ?;
36
+ let flags = object. get_named_property :: < String > ( "flags" ) . map_err ( |_| {
37
+ napi:: Error :: from_reason (
38
+ "Failed to extract the 'flags'. Ensure the value is a valid RegExp object." ,
39
+ )
40
+ } ) ?;
47
41
48
42
Self :: with_flags ( & source, & flags)
49
43
. map_err ( |err| napi:: Error :: new ( napi:: Status :: InvalidArg , err. to_string ( ) ) )
50
44
} else {
51
45
Err ( napi:: Error :: new (
52
46
napi:: Status :: ObjectExpected ,
53
- format ! ( "Expect value to be '[ object RegExp]', but received {object_type}" ) ,
47
+ "Expected a RegExp object as input value." ,
54
48
) )
55
49
}
56
50
}
0 commit comments