Skip to main content

yggdrasil/bridges/
mod.rs

1//! libs/ 下各 JS IIFE 库的 wasm-bindgen 桥接层。
2//!
3//! 每个子模块对应一个 IIFE 产物(挂在 `window` 上的对象字面量):
4//! 共享纯数据类型两端编译,wasm-bindgen extern 与 `EditorHandle`/`TerminalHandle`
5//! 仅在 `#[cfg(target_arch = "wasm32")]` 子模块里编译(服务端构建无 window)。
6//!
7//! 使用约定(Leptos):
8//! - 挂载点用 `NodeRef` 取元素,`create(&element, &opts)` 在该元素上创建实例;
9//! - 先用 [`library::use_browser_library`](库名用 [`library::BrowserLibrary`])等待库脚本就绪,
10//!   再在 `Effect` 内构造 Options 并 `create`;
11//! - Options 是普通 JS 对象:`Options::default()` 得到空对象,再用 setter 填充;
12//! - `window.__*` 页面函数只经 `globals` 调用(仅 wasm32),不手写字符串名;
13//! - 句柄(`EditorHandle`/`TerminalHandle`)含 JS 引用,不是 `Send + Sync`,
14//!   必须放进 `StoredValue::new_local`/`RwSignal::new_local`;句柄 `Drop` 时销毁 JS 实例,
15//!   组件卸载时在 `on_cleanup` 里 `take` 出来丢弃即可;
16//! - 回调以 wasm-bindgen `Closure` 注入,随句柄同生共死。
17
18/// CodeMirror SQL/代码编辑器桥接:extern 与 EditorHandle 在 #[cfg(wasm32)] 子模块里。
19/// SQL 补全 schema DTO(SqlSchema/SqlTable)是 server function 返回值,
20/// 定义在 `crate::models::sql_schema`,不在本模块。
21pub mod codemirror;
22/// `window.__*` 页面函数的类型化入口:名字与参数只在此处出现。
23#[cfg(target_arch = "wasm32")]
24pub mod globals;
25/// 浏览器库的按需加载与错误重试。
26pub mod library;
27/// 页面过渡与按历史记录保存的客户端状态。
28pub mod navigation;
29/// Tiptap 富文本编辑器桥接:共享类型(UploadsInFlight/UploadErrorEntry)两端都编译;
30/// wasm-bindgen extern 与 EditorHandle 在内部的 #[cfg(wasm32)] 子模块里。
31pub mod tiptap;
32/// xterm.js 终端桥接:结构镜像 codemirror。
33pub mod xterm;