Skip to main content

seam_engine_wasm/
lib.rs

1/* packages/server/engine/wasm/src/lib.rs */
2
3use serde_json::Value;
4use wasm_bindgen::prelude::*;
5
6// --- Engine functions ---
7
8#[wasm_bindgen]
9pub fn render_page(
10  template: &str,
11  loader_data_json: &str,
12  config_json: &str,
13  i18n_opts_json: &str,
14) -> String {
15  let i18n = if i18n_opts_json.is_empty() { None } else { Some(i18n_opts_json) };
16  seam_engine::render_page(template, loader_data_json, config_json, i18n)
17}
18
19#[wasm_bindgen]
20pub fn parse_build_output(manifest_json: &str) -> String {
21  match seam_engine::parse_build_output(manifest_json) {
22    Ok(pages) => serde_json::to_string(&pages).unwrap_or_else(|_| "[]".to_string()),
23    Err(e) => format!(r#"{{"error":"{}"}}"#, e),
24  }
25}
26
27#[wasm_bindgen]
28pub fn parse_i18n_config(manifest_json: &str) -> String {
29  match seam_engine::parse_i18n_config(manifest_json) {
30    Some(config) => serde_json::to_string(&config).unwrap_or_else(|_| "null".to_string()),
31    None => "null".to_string(),
32  }
33}
34
35#[wasm_bindgen]
36pub fn parse_rpc_hash_map(hash_map_json: &str) -> String {
37  match seam_engine::parse_rpc_hash_map(hash_map_json) {
38    Ok(result) => serde_json::to_string(&result).unwrap_or_else(|_| "null".to_string()),
39    Err(e) => format!(r#"{{"error":"{}"}}"#, e),
40  }
41}
42
43#[wasm_bindgen]
44pub fn ascii_escape_json(json: &str) -> String {
45  seam_engine::ascii_escape_json(json)
46}
47
48#[wasm_bindgen]
49pub fn i18n_query(
50  keys_json: &str,
51  locale: &str,
52  default_locale: &str,
53  messages_json: &str,
54) -> String {
55  let keys: Vec<String> = serde_json::from_str(keys_json).unwrap_or_default();
56  let messages: Value = serde_json::from_str(messages_json).unwrap_or(Value::Null);
57  let result = seam_engine::i18n_query(&keys, locale, default_locale, &messages);
58  serde_json::to_string(&result).unwrap_or_else(|_| "{}".to_string())
59}
60
61// --- Re-exported injector functions (engine WASM is a superset) ---
62
63#[wasm_bindgen]
64pub fn inject(template: &str, data_json: &str) -> String {
65  let data: Value = serde_json::from_str(data_json).unwrap_or(Value::Null);
66  seam_injector::inject(template, &data)
67}
68
69#[wasm_bindgen]
70pub fn inject_no_script(template: &str, data_json: &str) -> String {
71  let data: Value = serde_json::from_str(data_json).unwrap_or(Value::Null);
72  seam_injector::inject_no_script(template, &data)
73}