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}