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