/
lib.rs
77 lines (64 loc) · 2.03 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#[cfg(target_os = "macos")]
#[global_allocator]
static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc;
use napi::{CallContext, JsObject, JsUnknown};
use napi_derive::{js_function, module_exports};
#[js_function(1)]
fn transform(ctx: CallContext) -> napi::Result<JsUnknown> {
lightningcss_napi::transform(ctx)
}
#[js_function(1)]
fn transform_style_attribute(ctx: CallContext) -> napi::Result<JsUnknown> {
lightningcss_napi::transform_style_attribute(ctx)
}
#[js_function(1)]
pub fn bundle(ctx: CallContext) -> napi::Result<JsUnknown> {
lightningcss_napi::bundle(ctx)
}
#[cfg(not(target_arch = "wasm32"))]
#[js_function(1)]
pub fn bundle_async(ctx: CallContext) -> napi::Result<JsObject> {
lightningcss_napi::bundle_async(ctx)
}
#[cfg_attr(not(target_arch = "wasm32"), module_exports)]
fn init(mut exports: JsObject) -> napi::Result<()> {
exports.create_named_method("transform", transform)?;
exports.create_named_method("transformStyleAttribute", transform_style_attribute)?;
exports.create_named_method("bundle", bundle)?;
#[cfg(not(target_arch = "wasm32"))]
{
exports.create_named_method("bundleAsync", bundle_async)?;
}
Ok(())
}
#[cfg(target_arch = "wasm32")]
#[no_mangle]
pub fn register_module() {
unsafe fn register(raw_env: napi::sys::napi_env, raw_exports: napi::sys::napi_value) -> napi::Result<()> {
use napi::{Env, JsObject, NapiValue};
let env = Env::from_raw(raw_env);
let exports = JsObject::from_raw_unchecked(raw_env, raw_exports);
init(exports)
}
napi::bindgen_prelude::register_module_exports(register)
}
#[cfg(target_arch = "wasm32")]
#[no_mangle]
pub extern "C" fn napi_wasm_malloc(size: usize) -> *mut u8 {
use std::alloc::{alloc, Layout};
use std::mem;
let align = mem::align_of::<usize>();
if let Ok(layout) = Layout::from_size_align(size, align) {
unsafe {
if layout.size() > 0 {
let ptr = alloc(layout);
if !ptr.is_null() {
return ptr;
}
} else {
return align as *mut u8;
}
}
}
std::process::abort();
}