refactor: externalize filetree runtime helpers

This commit is contained in:
lix-2026
2026-05-25 00:22:08 +08:00
parent d4bef58773
commit 2f01dc3a2e
6 changed files with 556 additions and 1 deletions
+44
View File
@@ -102,6 +102,14 @@ pub fn build_router(state: AppState) -> Router {
"/api/mnote-browser-runtime/local-upload-runtime.js",
get(web_shell::local_upload_runtime_asset),
)
.route(
"/api/mnote-browser-runtime/filetree-runtime.js",
get(web_shell::filetree_runtime_asset),
)
.route(
"/api/mnote-browser-runtime/filetree-context-menu-runtime.js",
get(web_shell::filetree_context_menu_runtime_asset),
)
.route(
"/api/mnote-browser-runtime/tree-live-controller.js",
get(web_shell::tree_live_controller_runtime_asset),
@@ -508,6 +516,42 @@ mod tests {
}
}
#[tokio::test]
async fn mnote_browser_runtime_assets_are_explicitly_mounted() {
for path in [
"/api/mnote-browser-runtime/resource-open-runtime.js",
"/api/mnote-browser-runtime/local-upload-runtime.js",
"/api/mnote-browser-runtime/filetree-runtime.js",
"/api/mnote-browser-runtime/filetree-context-menu-runtime.js",
"/api/mnote-browser-runtime/tree-live-controller.js",
"/api/mnote-browser-runtime/tree-shell-runtime.js",
] {
let response = app(false)
.oneshot(
Request::builder()
.uri(path)
.body(Body::empty())
.expect("request"),
)
.await
.expect("response");
assert_eq!(
response.status(),
StatusCode::OK,
"{path} 应返回 runtime asset"
);
let content_type = response
.headers()
.get(axum::http::header::CONTENT_TYPE)
.and_then(|value| value.to_str().ok())
.unwrap_or("");
assert!(
content_type.starts_with("application/javascript"),
"{path} 应声明 JavaScript content-type"
);
}
}
#[tokio::test]
async fn dev_hot_reload_endpoint_is_mounted() {
let response = app(false)
@@ -4395,6 +4395,34 @@ pub async fn local_upload_runtime_asset() -> Response {
.unwrap_or_else(|_| Response::new(Body::empty()))
}
pub async fn filetree_context_menu_runtime_asset() -> Response {
const JS: &str = include_str!("../../browser/filetree-context-menu-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 filetree_runtime_asset() -> Response {
const JS: &str = include_str!("../../browser/filetree-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 tree_live_controller_runtime_asset() -> Response {
const JS: &str = include_str!("../../browser/tree-live-controller.js");
Response::builder()