From 39e9028fa7f5799c2edf0bc696c57a8d34756bcc Mon Sep 17 00:00:00 2001 From: Thomas Girod Date: Thu, 3 Sep 2026 13:32:25 +0200 Subject: [PATCH] add WASM bindings --- Cargo.lock | 63 +++++++++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 22 ++++++++++------- wasm/.gitignore | 6 +++++ wasm/Cargo.toml | 21 +++++++++++++++++ wasm/README.md | 11 +++++++++ wasm/src/lib.rs | 17 +++++++++++++ 6 files changed, 129 insertions(+), 11 deletions(-) create mode 100644 wasm/.gitignore create mode 100644 wasm/Cargo.toml create mode 100644 wasm/README.md create mode 100644 wasm/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 965edf2..fbfcb74 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -136,6 +136,12 @@ dependencies = [ "syn", ] +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + [[package]] name = "caseless" version = "0.2.2" @@ -669,9 +675,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -948,6 +954,59 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasm" +version = "0.1.1" +dependencies = [ + "mark", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +dependencies = [ + "unicode-ident", +] + [[package]] name = "winapi-util" version = "0.1.11" diff --git a/Cargo.toml b/Cargo.toml index ebe9c04..e18c243 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,23 +1,27 @@ [package] +edition = "2024" name = "aemark" version = "0.1.1" -edition = "2024" [lib] name = "aemark" crate-type = ["cdylib"] -[workspace] -resolver = "3" -members = ["mark"] - [dependencies] pyo3 = "0.29.0" -mark = { path = "mark" } + +[dependencies.mark] +path = "mark" + +[workspace] +members = [ + "mark", + "wasm", +] +resolver = "3" [profile.release] -strip = true -panic = "abort" lto = "fat" codegen-units = 1 - +panic = "abort" +strip = true diff --git a/wasm/.gitignore b/wasm/.gitignore new file mode 100644 index 0000000..4e30131 --- /dev/null +++ b/wasm/.gitignore @@ -0,0 +1,6 @@ +/target +**/*.rs.bk +Cargo.lock +bin/ +pkg/ +wasm-pack.log diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml new file mode 100644 index 0000000..0073157 --- /dev/null +++ b/wasm/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "wasm" +version = "0.1.1" +authors = ["Thomas Girod "] +edition = "2018" + +[package.metadata.wasm-pack.profile.release] +wasm-opt = false + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wasm-bindgen = "0.2.84" +mark = { path = "../mark" } + +[profile.release] +lto = "fat" +codegen-units = 1 +panic = "abort" +strip = true diff --git a/wasm/README.md b/wasm/README.md new file mode 100644 index 0000000..61bd80a --- /dev/null +++ b/wasm/README.md @@ -0,0 +1,11 @@ +JS bindings for the aemark parser, built upon Rust and WASM. + +Exemple : + +```javascript +import { markdown } from "@ae_utbm/aemark" + +const result = markdown("This some *text* formatted in __markdown__"); +console.log(result); +//

This some text formatted in markdown

\n +``` \ No newline at end of file diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs new file mode 100644 index 0000000..15fcb74 --- /dev/null +++ b/wasm/src/lib.rs @@ -0,0 +1,17 @@ +use wasm_bindgen::prelude::*; + +/// Generate HTML from a markdown string following the aemark spec. +/// +/// # Exemple +/// +/// ```javascript +/// import { markdown } from "@ae_utbm/aemark" +/// +/// const result = markdown("This some *text* formatted in __markdown__"); +/// console.log(result); +/// //

This some text formatted in markdown

\n +/// ``` +#[wasm_bindgen] +pub fn markdown(s: &str) -> String { + mark::markdown(s) +}