1
+ use cow_utils:: CowUtils ;
1
2
use derive_more:: Debug ;
2
- use napi:: { bindgen_prelude:: ToNapiValue , JsValue } ;
3
+ use napi:: { bindgen_prelude:: ToNapiValue , JsValue , ValueType } ;
3
4
use napi_derive:: napi;
4
5
use rspack_core:: ModuleIdentifier ;
5
6
use rspack_error:: {
@@ -124,7 +125,8 @@ impl napi::bindgen_prelude::FromNapiValue for RspackError {
124
125
napi_val : napi:: bindgen_prelude:: sys:: napi_value ,
125
126
) -> napi:: bindgen_prelude:: Result < RspackError > {
126
127
let unknown = napi:: bindgen_prelude:: Unknown :: from_napi_value ( env, napi_val) ?;
127
- if !unknown. is_error ( ) ? {
128
+ let ty = unknown. get_type ( ) ?;
129
+ if ty != ValueType :: Object {
128
130
let error = unknown. coerce_to_string ( ) ?. into_utf8 ( ) ?. into_owned ( ) ?;
129
131
return Ok ( RspackError {
130
132
name : "NonErrorEmittedError" . to_string ( ) ,
@@ -141,30 +143,8 @@ impl napi::bindgen_prelude::FromNapiValue for RspackError {
141
143
}
142
144
143
145
let obj = napi:: bindgen_prelude:: Object :: from_napi_value ( env, napi_val) ?;
144
- let name: String = obj
145
- . get ( "name" )
146
- . map_err ( |mut err| {
147
- err. reason = format ! ( "{} on {}.{}" , err. reason, "RspackError" , "name" ) ;
148
- err
149
- } ) ?
150
- . ok_or_else ( || {
151
- napi:: bindgen_prelude:: Error :: new (
152
- napi:: bindgen_prelude:: Status :: InvalidArg ,
153
- "Missing field `name`" ,
154
- )
155
- } ) ?;
156
- let message: String = obj
157
- . get ( "message" )
158
- . map_err ( |mut err| {
159
- err. reason = format ! ( "{} on {}.{}" , err. reason, "RspackError" , "message" ) ;
160
- err
161
- } ) ?
162
- . ok_or_else ( || {
163
- napi:: bindgen_prelude:: Error :: new (
164
- napi:: bindgen_prelude:: Status :: InvalidArg ,
165
- "Missing field `message`" ,
166
- )
167
- } ) ?;
146
+ let name: String = obj. get ( "name" ) ?. unwrap_or ( "Error" . to_string ( ) ) ;
147
+ let message: String = obj. get ( "message" ) ?. unwrap_or ( "Error" . to_string ( ) ) ;
168
148
let module = obj. get :: < ModuleObject > ( "module" ) . unwrap_or ( None ) ;
169
149
let module_identifier = if let Some ( module) = & module {
170
150
Some ( module. identifier ( ) )
@@ -230,7 +210,10 @@ impl RspackError {
230
210
// the original error message is extracted from the `message`
231
211
error = Some ( Box :: new ( RspackError {
232
212
name : "Error" . to_string ( ) ,
233
- message : diagnostic. to_string ( ) . replace ( "Module not found: " , "" ) ,
213
+ message : diagnostic
214
+ . to_string ( )
215
+ . cow_replace ( "Module not found: " , "" )
216
+ . to_string ( ) ,
234
217
severity : None ,
235
218
module_identifier : None ,
236
219
module : None ,
0 commit comments