From 14de561408348a0b854ab602a8064f4dcb3b3c16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 1 Sep 2026 19:52:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A2=84=E8=A7=88=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E8=B5=84=E6=BA=90=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 /ui 资源映射到项目根 ui 目录 允许 legacy 布局安全访问 ui 目录并补 HTTP 响应回归测试 --- .../src-tauri/src/preview.rs | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/preview.rs b/apps/ai-game-creator-shell/src-tauri/src/preview.rs index 6f13cd088..587b7f01a 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/preview.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/preview.rs @@ -1429,7 +1429,7 @@ pub(crate) fn resolve_preview_path(root: &Path, url_path: &str) -> Result Result metadata, @@ -1517,7 +1517,7 @@ fn canonical_preview_path(root: &Path, file_path: &Path) -> Result Option { @@ -1659,4 +1659,27 @@ mod tests { assert!(resolve_preview_path(root.path(), "/.agent/secret.json").is_err()); assert!(resolve_preview_path(root.path(), "/memory/private.md").is_err()); } + + #[test] + fn legacy_layout_serves_root_ui_modules() { + let root = tempfile::tempdir().expect("create preview root"); + fs::create_dir_all(root.path().join("game")).expect("create game directory"); + fs::create_dir_all(root.path().join("ui")).expect("create ui directory"); + fs::write(root.path().join("game/index.html"), "") + .expect("write game entry"); + fs::write(root.path().join("ui/generated-x.js"), "export {};") + .expect("write generated module"); + + let expected = root + .path() + .join("ui/generated-x.js") + .canonicalize() + .expect("canonical generated module"); + assert_eq!(resolve_preview_path(root.path(), "/ui/generated-x.js").unwrap(), expected); + + let response = build_preview_response(root.path(), "GET", "/ui/generated-x.js"); + let response_text = String::from_utf8_lossy(&response); + assert!(response_text.starts_with("HTTP/1.1 200 OK\r\n")); + assert!(response_text.contains("export {};")); + } }