Skip to main content

Module bridges

Module bridges 

Source
Expand description

libs/ 下各 JS IIFE 库的 wasm-bindgen 桥接层。

每个子模块对应一个 IIFE 产物(挂在 window 上的对象字面量): 共享纯数据类型两端编译,wasm-bindgen extern 与 EditorHandle/TerminalHandle 仅在 #[cfg(target_arch = "wasm32")] 子模块里编译(服务端构建无 window)。

使用约定(Leptos):

  • 挂载点用 NodeRef 取元素,create(&element, &opts) 在该元素上创建实例;
  • 先用 library::use_browser_library(库名用 library::BrowserLibrary)等待库脚本就绪, 再在 Effect 内构造 Options 并 create;
  • Options 是普通 JS 对象:Options::default() 得到空对象,再用 setter 填充;
  • window.__* 页面函数只经 globals 调用(仅 wasm32),不手写字符串名;
  • 句柄(EditorHandle/TerminalHandle)含 JS 引用,不是 Send + Sync, 必须放进 StoredValue::new_local/RwSignal::new_local;句柄 Drop 时销毁 JS 实例, 组件卸载时在 on_cleanup 里 take 出来丢弃即可;
  • 回调以 wasm-bindgen Closure 注入,随句柄同生共死。

Modules§

codemirror
CodeMirror SQL/代码编辑器桥接:extern 与 EditorHandle 在 #[cfg(wasm32)] 子模块里。 SQL 补全 schema DTO(SqlSchema/SqlTable)是 server function 返回值, 定义在 crate::models::sql_schema,不在本模块。 CodeMirror 编辑器的 wasm-bindgen 绑定层。
library
浏览器库的按需加载与错误重试。 按组件需求加载浏览器库,资源完成后才允许构造 wasm-bindgen Options/实例。
navigation
页面过渡与按历史记录保存的客户端状态。 浏览器导航协调器桥接;历史记录中的页面状态只保存在当前文档内存中。
tiptap
Tiptap 富文本编辑器桥接:共享类型(UploadsInFlight/UploadErrorEntry)两端都编译; wasm-bindgen extern 与 EditorHandle 在内部的 #[cfg(wasm32)] 子模块里。 Tiptap 编辑器的 wasm-bindgen 绑定层。
xterm
xterm.js 终端桥接:结构镜像 codemirror。 xterm.js 终端桥接:输出专用(无 stdin),配合 SSE 流式渲染容器 stdout/stderr。