1use serde_json::Value;
4use wasm_bindgen::prelude::*;
5
6#[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#[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}