next_swc_napi/
mdx.rs

1use mdxjs::{Options, compile};
2use napi::bindgen_prelude::*;
3use napi_derive::napi;
4
5pub struct MdxCompileTask {
6    pub input: String,
7    pub option: Buffer,
8}
9
10impl Task for MdxCompileTask {
11    type Output = String;
12    type JsValue = String;
13
14    fn compute(&mut self) -> napi::Result<Self::Output> {
15        let options: Options = serde_json::from_slice(&self.option)?;
16
17        compile(&self.input, &options)
18            .map_err(|err| napi::Error::new(Status::GenericFailure, err.to_string()))
19    }
20
21    fn resolve(&mut self, _env: Env, output: Self::Output) -> napi::Result<Self::JsValue> {
22        Ok(output)
23    }
24}
25
26#[napi]
27pub fn mdx_compile(
28    value: String,
29    option: Buffer,
30    signal: Option<AbortSignal>,
31) -> napi::Result<AsyncTask<MdxCompileTask>> {
32    let task = MdxCompileTask {
33        input: value,
34        option,
35    };
36    Ok(AsyncTask::with_optional_signal(task, signal))
37}
38
39#[napi]
40pub fn mdx_compile_sync(value: String, option: Buffer) -> napi::Result<String> {
41    let option: Options = serde_json::from_slice(&option)?;
42
43    compile(value.as_str(), &option)
44        .map_err(|err| napi::Error::new(Status::GenericFailure, format!("{err:?}")))
45}