refactor: split document tiptap conversion runtime

This commit is contained in:
lix-2026
2026-05-26 00:44:07 +08:00
parent 990df30a0f
commit b4d7360cd7
5 changed files with 597 additions and 556 deletions
+29 -6
View File
@@ -855,6 +855,20 @@ pub async fn document_conflict_panel_runtime_asset() -> Response {
.unwrap_or_else(|_| Response::new(Body::empty()))
}
pub async fn document_tiptap_conversion_runtime_asset() -> Response {
const JS: &str = include_str!("../../browser/document-tiptap-conversion-runtime.js");
Response::builder()
.status(StatusCode::OK)
.header(
header::CONTENT_TYPE,
"application/javascript; charset=utf-8",
)
.header(header::CACHE_CONTROL, "no-store")
.header(HEADER_MNOTE_WEB_OWNER, "mnote-web")
.body(Body::from(JS))
.unwrap_or_else(|_| Response::new(Body::empty()))
}
pub async fn document_editor_adapter_runtime_asset() -> Response {
const JS: &str = include_str!("../../browser/document-editor-adapter-runtime.js");
Response::builder()
@@ -1278,6 +1292,8 @@ mod tests {
const DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS: &str =
include_str!("../../browser/document-editor-adapter-runtime.js");
const DOCUMENT_TIPTAP_CONVERSION_RUNTIME_JS: &str =
include_str!("../../browser/document-tiptap-conversion-runtime.js");
fn app() -> axum::Router {
build_app(AppState::new(AppConfig {
@@ -1566,11 +1582,14 @@ mod tests {
assert!(html.contains("/api/tree/events"));
assert!(html.contains("/api/realtime/ws"));
assert!(runtime.contains("syncPageAggregateScript(session, nextAggregate);"));
assert!(runtime.contains(
let conversion_runtime = DOCUMENT_TIPTAP_CONVERSION_RUNTIME_JS;
assert!(conversion_runtime.contains(
"const pageBodyTiptapDocument = (body, fallbackText = '', context = null) => {"
));
assert!(runtime.contains("body?.blockDocument || body?.block_document"));
assert!(runtime.contains("localizeTiptapAssetUrls(toTiptapDocument(body.content"));
assert!(conversion_runtime.contains("body?.blockDocument || body?.block_document"));
assert!(
conversion_runtime.contains("localizeTiptapAssetUrls(toTiptapDocument(body.content")
);
assert!(runtime
.contains("const nextTiptapDocument = pageBodyTiptapDocument(nextBody, '', session);"));
assert!(runtime.contains(
@@ -2022,7 +2041,10 @@ mod tests {
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("PANES_BOOTSTRAP_ID"));
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("ROOT_SELECTOR"));
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("BRIDGE_PROTOCOL"));
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("legacyInlineContentToTiptap"));
assert!(
DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("document-tiptap-conversion-runtime.js")
);
assert!(DOCUMENT_TIPTAP_CONVERSION_RUNTIME_JS.contains("legacyInlineContentToTiptap"));
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("openSecondaryDocument"));
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS.contains("openPrimaryMindmap"));
}
@@ -2166,7 +2188,7 @@ mod tests {
.expect("body");
let html = String::from_utf8(body.to_vec()).expect("html");
assert!(html.contains(r#"<script type="module" src="/api/mnote-browser-runtime/document-editor-adapter-runtime.js"></script>"#));
let runtime = DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS;
let runtime = DOCUMENT_TIPTAP_CONVERSION_RUNTIME_JS;
assert!(runtime.contains("legacyInlineContentToTiptap"));
assert!(runtime.contains("legacyStylesToTiptapMarks"));
assert!(runtime.contains("legacyMarkArrayToTiptapMarks"));
@@ -2183,7 +2205,8 @@ mod tests {
assert!(runtime.contains("typeof payload.text === 'string'"));
assert!(runtime.contains("payload.type === 'hard_break'"));
assert!(runtime.contains("typeof body?.fileVersion === 'string'"));
assert!(runtime.contains("expectedFileVersion: session.conflictDetectionKey"));
assert!(DOCUMENT_EDITOR_ADAPTER_RUNTIME_JS
.contains("expectedFileVersion: session.conflictDetectionKey"));
assert!(runtime.contains("node?.attrs?.mnoteBlockType === 'mindmap'"));
assert!(runtime.contains("blockType: 'mindmap'"));
assert!(runtime.contains("...mindmapPropsFromAttrs(node?.attrs, blockId)"));