1- extern crate napi;
2- #[ macro_use]
3- extern crate napi_derive;
41extern crate serde;
52extern crate serde_bytes;
63extern crate cssparser;
@@ -24,7 +21,6 @@ mod printer;
2421mod traits;
2522mod macros;
2623
27- use napi:: { CallContext , JsObject , JsBuffer } ;
2824use serde:: { Deserialize , Serialize } ;
2925use cssparser:: { Parser , ParserInput , RuleListParser } ;
3026use crate :: traits:: ToCss ;
@@ -36,25 +32,62 @@ use std::collections::HashMap;
3632
3733use parser:: TopLevelRuleParser ;
3834
39- #[ derive( Serialize , Debug , Deserialize ) ]
40- struct Config {
41- filename : String ,
42- #[ serde( with = "serde_bytes" ) ]
43- code : Vec < u8 > ,
44- targets : Option < Browsers >
35+ // ---------------------------------------------
36+
37+ #[ cfg( target_arch = "wasm32" ) ]
38+ use serde_wasm_bindgen:: { from_value} ;
39+ #[ cfg( target_arch = "wasm32" ) ]
40+ use wasm_bindgen:: prelude:: * ;
41+
42+ #[ cfg( target_arch = "wasm32" ) ]
43+ #[ wasm_bindgen]
44+ pub fn transform ( config_val : JsValue ) -> Result < JsValue , JsValue > {
45+ let config: Config = from_value ( config_val) . map_err ( JsValue :: from) ?;
46+
47+ let code = unsafe { std:: str:: from_utf8_unchecked ( & config. code ) } ;
48+
49+ Ok ( compile ( code, true , config. targets ) . into ( ) )
4550}
4651
52+ // ---------------------------------------------
53+
54+ #[ cfg( not( target_arch = "wasm32" ) ) ]
55+ extern crate napi;
56+ #[ cfg( not( target_arch = "wasm32" ) ) ]
57+ #[ macro_use]
58+ extern crate napi_derive;
59+ #[ cfg( not( target_arch = "wasm32" ) ) ]
60+ use napi:: { CallContext , JsObject , JsBuffer } ;
61+
62+ #[ cfg( not( target_arch = "wasm32" ) ) ]
4763#[ js_function( 1 ) ]
4864fn transform ( ctx : CallContext ) -> napi:: Result < JsBuffer > {
4965 let opts = ctx. get :: < JsObject > ( 0 ) ?;
5066 let config: Config = ctx. env . from_js_value ( opts) ?;
51-
5267 let code = unsafe { std:: str:: from_utf8_unchecked ( & config. code ) } ;
5368 let res = compile ( code, true , config. targets ) ;
5469
5570 Ok ( ctx. env . create_buffer_with_data ( res. into_bytes ( ) ) ?. into_raw ( ) )
5671}
5772
73+ #[ cfg( not( target_arch = "wasm32" ) ) ]
74+ #[ module_exports]
75+ fn init ( mut exports : JsObject ) -> napi:: Result < ( ) > {
76+ exports. create_named_method ( "transform" , transform) ?;
77+
78+ Ok ( ( ) )
79+ }
80+
81+ // ---------------------------------------------
82+
83+ #[ derive( Serialize , Debug , Deserialize ) ]
84+ struct Config {
85+ pub filename : String ,
86+ #[ serde( with = "serde_bytes" ) ]
87+ pub code : Vec < u8 > ,
88+ pub targets : Option < Browsers >
89+ }
90+
5891fn compile ( code : & str , minify : bool , targets : Option < Browsers > ) -> String {
5992 let mut input = ParserInput :: new ( & code) ;
6093 let mut parser = Parser :: new ( & mut input) ;
@@ -178,13 +211,6 @@ fn compile(code: &str, minify: bool, targets: Option<Browsers>) -> String {
178211 dest
179212}
180213
181- #[ module_exports]
182- fn init ( mut exports : JsObject ) -> napi:: Result < ( ) > {
183- exports. create_named_method ( "transform" , transform) ?;
184-
185- Ok ( ( ) )
186- }
187-
188214#[ cfg( test) ]
189215mod tests {
190216 use super :: * ;
0 commit comments