@@ -18,54 +18,13 @@ use std::path::{Path, PathBuf};
1818use std:: str:: FromStr ;
1919use std:: sync:: { Arc , Mutex , RwLock } ;
2020
21- #[ cfg( not( target_arch = "wasm32" ) ) ]
2221use transformer:: JsVisitor ;
2322
2423#[ cfg( not( target_arch = "wasm32" ) ) ]
2524mod threadsafe_function;
26- #[ cfg( not( target_arch = "wasm32" ) ) ]
2725mod transformer;
2826
29- // ---------------------------------------------
30-
31- #[ cfg( target_arch = "wasm32" ) ]
32- use serde_wasm_bindgen:: { from_value, Serializer } ;
33- #[ cfg( target_arch = "wasm32" ) ]
34- use wasm_bindgen:: prelude:: * ;
35-
36- #[ cfg( target_arch = "wasm32" ) ]
37- struct JsVisitor ;
38-
39- #[ cfg( target_arch = "wasm32" ) ]
40- impl < ' i > lightningcss:: visitor:: Visitor < ' i > for JsVisitor {
41- const TYPES : lightningcss:: visitor:: VisitTypes = lightningcss:: visitor:: VisitTypes :: empty ( ) ;
42- }
43-
44- #[ cfg( target_arch = "wasm32" ) ]
45- #[ wasm_bindgen]
46- pub fn transform ( config_val : JsValue ) -> Result < JsValue , JsValue > {
47- let config: Config = from_value ( config_val) . map_err ( JsValue :: from) ?;
48- let code = unsafe { std:: str:: from_utf8_unchecked ( & config. code ) } ;
49- let res = compile ( code, & config, & mut None ) ?;
50- let serializer = Serializer :: new ( ) . serialize_maps_as_objects ( true ) ;
51- res. serialize ( & serializer) . map_err ( JsValue :: from)
52- }
53-
54- #[ cfg( target_arch = "wasm32" ) ]
55- #[ wasm_bindgen( js_name = "transformStyleAttribute" ) ]
56- pub fn transform_style_attribute ( config_val : JsValue ) -> Result < JsValue , JsValue > {
57- let config: AttrConfig = from_value ( config_val) . map_err ( JsValue :: from) ?;
58- let code = unsafe { std:: str:: from_utf8_unchecked ( & config. code ) } ;
59- let res = compile_attr ( code, & config, & mut None ) ?;
60- let serializer = Serializer :: new ( ) . serialize_maps_as_objects ( true ) ;
61- res. serialize ( & serializer) . map_err ( JsValue :: from)
62- }
63-
64- // ---------------------------------------------
65-
66- #[ cfg( not( target_arch = "wasm32" ) ) ]
6727use napi:: { CallContext , Env , JsObject , JsUnknown } ;
68- #[ cfg( not( target_arch = "wasm32" ) ) ]
6928use napi_derive:: { js_function, module_exports} ;
7029
7130#[ derive( Serialize ) ]
@@ -81,7 +40,6 @@ struct TransformResult<'i> {
8140 warnings : Vec < Warning < ' i > > ,
8241}
8342
84- #[ cfg( not( target_arch = "wasm32" ) ) ]
8543impl < ' i > TransformResult < ' i > {
8644 fn into_js ( self , env : Env ) -> napi:: Result < JsUnknown > {
8745 // Manually construct buffers so we avoid a copy and work around
@@ -106,7 +64,6 @@ impl<'i> TransformResult<'i> {
10664 }
10765}
10866
109- #[ cfg( not( target_arch = "wasm32" ) ) ]
11067#[ js_function( 1 ) ]
11168fn transform ( ctx : CallContext ) -> napi:: Result < JsUnknown > {
11269 use transformer:: JsVisitor ;
@@ -134,7 +91,6 @@ fn transform(ctx: CallContext) -> napi::Result<JsUnknown> {
13491 }
13592}
13693
137- #[ cfg( not( target_arch = "wasm32" ) ) ]
13894#[ js_function( 1 ) ]
13995fn transform_style_attribute ( ctx : CallContext ) -> napi:: Result < JsUnknown > {
14096 use transformer:: JsVisitor ;
@@ -370,7 +326,6 @@ mod bundle {
370326 handle_error ( tx, read_on_js_thread ( ctx) )
371327 }
372328
373- #[ cfg( not( target_arch = "wasm32" ) ) ]
374329 #[ js_function( 1 ) ]
375330 pub fn bundle_async ( ctx : CallContext ) -> napi:: Result < JsObject > {
376331 use transformer:: JsVisitor ;
@@ -488,17 +443,53 @@ mod bundle {
488443 }
489444}
490445
491- #[ cfg( not( target_arch = "wasm32" ) ) ]
492- #[ module_exports]
446+ #[ cfg_attr( not( target_arch = "wasm32" ) , module_exports) ]
493447fn init ( mut exports : JsObject ) -> napi:: Result < ( ) > {
494448 exports. create_named_method ( "transform" , transform) ?;
495449 exports. create_named_method ( "transformStyleAttribute" , transform_style_attribute) ?;
496- exports. create_named_method ( "bundle" , bundle:: bundle) ?;
497- exports. create_named_method ( "bundleAsync" , bundle:: bundle_async) ?;
450+
451+ #[ cfg( not( target_arch = "wasm32" ) ) ]
452+ {
453+ exports. create_named_method ( "bundle" , bundle:: bundle) ?;
454+ exports. create_named_method ( "bundleAsync" , bundle:: bundle_async) ?;
455+ }
498456
499457 Ok ( ( ) )
500458}
501459
460+ #[ cfg( target_arch = "wasm32" ) ]
461+ #[ no_mangle]
462+ pub unsafe fn napi_register_wasm_v1 ( raw_env : napi:: sys:: napi_env , raw_exports : napi:: sys:: napi_value ) {
463+ use napi:: { Env , JsObject , NapiValue } ;
464+
465+ let env = Env :: from_raw ( raw_env) ;
466+ let exports = JsObject :: from_raw_unchecked ( raw_env, raw_exports) ;
467+ init ( exports) ;
468+ }
469+
470+ #[ cfg( target_arch = "wasm32" ) ]
471+ #[ no_mangle]
472+ pub extern "C" fn napi_wasm_malloc ( size : usize ) -> * mut u8 {
473+ use std:: alloc:: { alloc, Layout } ;
474+ use std:: mem;
475+
476+ let align = mem:: align_of :: < usize > ( ) ;
477+ if let Ok ( layout) = Layout :: from_size_align ( size, align) {
478+ unsafe {
479+ if layout. size ( ) > 0 {
480+ let ptr = alloc ( layout) ;
481+ if !ptr. is_null ( ) {
482+ return ptr;
483+ }
484+ } else {
485+ return align as * mut u8 ;
486+ }
487+ }
488+ }
489+
490+ std:: process:: abort ( ) ;
491+ }
492+
502493// ---------------------------------------------
503494
504495#[ derive( Debug , Deserialize ) ]
@@ -705,7 +696,6 @@ fn compile<'i>(
705696 } )
706697}
707698
708- #[ cfg( not( target_arch = "wasm32" ) ) ]
709699fn compile_bundle < ' i , ' o , P : SourceProvider , F : FnOnce ( & mut StyleSheet < ' i , ' o > ) -> napi:: Result < ( ) > > (
710700 fs : & ' i P ,
711701 config : & ' o BundleConfig ,
@@ -827,7 +817,6 @@ struct AttrResult<'i> {
827817 warnings : Vec < Warning < ' i > > ,
828818}
829819
830- #[ cfg( not( target_arch = "wasm32" ) ) ]
831820impl < ' i > AttrResult < ' i > {
832821 fn into_js ( self , ctx : CallContext ) -> napi:: Result < JsUnknown > {
833822 // Manually construct buffers so we avoid a copy and work around
@@ -906,7 +895,6 @@ enum CompileError<'i, E: std::error::Error> {
906895 SourceMapError ( parcel_sourcemap:: SourceMapError ) ,
907896 BundleError ( Error < BundleErrorKind < ' i , E > > ) ,
908897 PatternError ( PatternParseError ) ,
909- #[ cfg( not( target_arch = "wasm32" ) ) ]
910898 JsError ( napi:: Error ) ,
911899}
912900
@@ -919,14 +907,12 @@ impl<'i, E: std::error::Error> std::fmt::Display for CompileError<'i, E> {
919907 CompileError :: BundleError ( err) => err. kind . fmt ( f) ,
920908 CompileError :: PatternError ( err) => err. fmt ( f) ,
921909 CompileError :: SourceMapError ( err) => write ! ( f, "{}" , err. to_string( ) ) , // TODO: switch to `fmt::Display` once parcel_sourcemap supports this
922- #[ cfg( not( target_arch = "wasm32" ) ) ]
923910 CompileError :: JsError ( err) => std:: fmt:: Debug :: fmt ( & err, f) ,
924911 }
925912 }
926913}
927914
928915impl < ' i , E : std:: error:: Error > CompileError < ' i , E > {
929- #[ cfg( not( target_arch = "wasm32" ) ) ]
930916 fn throw ( self , env : Env , code : Option < & str > ) -> napi:: Result < JsUnknown > {
931917 let reason = self . to_string ( ) ;
932918 let data = match & self {
@@ -999,7 +985,6 @@ impl<'i, E: std::error::Error> From<Error<BundleErrorKind<'i, E>>> for CompileEr
999985 }
1000986}
1001987
1002- #[ cfg( not( target_arch = "wasm32" ) ) ]
1003988impl < ' i , E : std:: error:: Error > From < CompileError < ' i , E > > for napi:: Error {
1004989 fn from ( e : CompileError < ' i , E > ) -> napi:: Error {
1005990 match e {
@@ -1011,17 +996,6 @@ impl<'i, E: std::error::Error> From<CompileError<'i, E>> for napi::Error {
1011996 }
1012997}
1013998
1014- #[ cfg( target_arch = "wasm32" ) ]
1015- impl < ' i , E : std:: error:: Error > From < CompileError < ' i , E > > for wasm_bindgen:: JsValue {
1016- fn from ( e : CompileError < ' i , E > ) -> wasm_bindgen:: JsValue {
1017- match e {
1018- CompileError :: SourceMapError ( e) => js_sys:: Error :: new ( & e. to_string ( ) ) . into ( ) ,
1019- CompileError :: PatternError ( e) => js_sys:: Error :: new ( & e. to_string ( ) ) . into ( ) ,
1020- _ => js_sys:: Error :: new ( & e. to_string ( ) ) . into ( ) ,
1021- }
1022- }
1023- }
1024-
1025999#[ derive( Serialize ) ]
10261000struct Warning < ' i > {
10271001 message : String ,
0 commit comments