8000 GitHub - Codpoe/mdx-rs: Rust MDX compilation binding for Rspress
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Codpoe/mdx-rs

 
 

Repository files navigation

@rspress/mdx-rs

This is a Node.js binding for MDX compliation of Rspress which is a modern documentation tool based on Rspack.

It can be 10x+ faster than compiler in pure JavaScript version.The benchmark result of @rspress/mdx-rs vs @mdx-js/mdx is as follows:

Tool Time Spend
@rspress/mdx-rs 977 ms
@mdx-js/mdx 21300 ms

We forked mdxjs-rs, the Rust version of mdx compiler and customize it for Rspress, adding the following features:

Crate Description
mdx_rs_binding 🔥 Add Node.js binding so that we can use it in Node.js.
mdx_plugin_container Implement container grammar like :::tip in @rspress/plugin-container-syntax.
mdx_plugin_toc Generate table of contents.
mdx_plugin_frontmatter Parse frontmatter and export it in the esm module.
mdx_plugin_external_link Add target="_blank" and rel="noopener noreferrer" to external link.
mdx_plugin_header_anchor Add anchor for every header.
mdx_plugin_normalize_link Normalize link to complete url base on current filepath.
mdx_plugin_html Serialize hast to html string
slugger Generate slug for header, port from github-slugger.

Install

# npm
npm install @rspress/mdx-rs
# yarn
yarn add @rspress/mdx-rs
# pnpm
pnpm install @rspress/mdx-rs

Usage

import { compile } from "@rspress/mdx-rs";

async function main() {
  const value = `
  # Hello World

  This is a demo of @rspress/mdx-rs
  `;

  const result = await compile({
    // The mdx content
    value,
    // File path of the mdx file, the compiler will determine the different syntax(md/mdx) based on the file extension
    filepath: "xxx.mdx",
    // Whether to enable development mode, default is false
    development: true,
    // Current working directory, can be empty string
    root: "",
  });

  console.log(result);
}

Of course, you can also the compileSync function to compile mdx synchronously, which is not recommended because it will block the event loop and slow down the compile process.

import { compileSync } from "@rspress/mdx-rs";

function main() {
  const value = `
  # Hello World

  This is a demo of @rspress/mdx-rs
  `;

  const result = compileSync({
    // The mdx content
    value,
    // File path of the mdx file, can be empty string
    filepath: "",
    // Whether to enable development mode, default is false
    development: true,
    // Current working directory, can be empty string
    root: "",
  });

  console.log(result);
}

Credits

Thanks to mdxjs-rs, the awesome Rust library authored by wooorm.

Also, thanks to napi-rs, authored by Brooooooklyn, which is a great solution to help us build Node.js binding for Rust.

About

Rust MDX compilation binding for Rspress

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 97.5%
  • JavaScript 1.9%
  • Other 0.6%
0