diff --git a/.changepacks/changepack_log_A9ir3S4hRUjc85hjBLGgF.json b/.changepacks/changepack_log_A9ir3S4hRUjc85hjBLGgF.json new file mode 100644 index 0000000..75c3808 --- /dev/null +++ b/.changepacks/changepack_log_A9ir3S4hRUjc85hjBLGgF.json @@ -0,0 +1 @@ +{"changes":{"Cargo.toml":"Patch"},"note":"Fix js script path","date":"2026-03-11T06:01:44.334450200Z"} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 6acfb7b..c369bc1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3457,7 +3457,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vespera" -version = "0.1.41" +version = "0.1.42" dependencies = [ "axum", "axum-extra", @@ -3472,7 +3472,7 @@ dependencies = [ [[package]] name = "vespera_core" -version = "0.1.41" +version = "0.1.42" dependencies = [ "rstest", "serde", @@ -3481,7 +3481,7 @@ dependencies = [ [[package]] name = "vespera_macro" -version = "0.1.41" +version = "0.1.42" dependencies = [ "insta", "proc-macro2", diff --git a/crates/vespera_macro/src/router_codegen.rs b/crates/vespera_macro/src/router_codegen.rs index fa3b748..96f1485 100644 --- a/crates/vespera_macro/src/router_codegen.rs +++ b/crates/vespera_macro/src/router_codegen.rs @@ -429,10 +429,10 @@ impl Parse for ExportAppInput { } /// Swagger UI HTML template. Contains `{}` format placeholder for the OpenAPI spec JSON. -const SWAGGER_UI_HTML: &str = r#"Swagger UI
"#; +const SWAGGER_UI_HTML: &str = r##"Swagger UI
"##; /// ReDoc HTML template. Contains `{}` format placeholder for the OpenAPI spec JSON. -const REDOC_HTML: &str = r#"ReDoc
"#; +const REDOC_HTML: &str = r#"ReDoc
"#; /// Generate a documentation route handler (Swagger UI or ReDoc). /// @@ -1266,6 +1266,37 @@ pub fn get_users() -> String { assert!(code.contains("__VESPERA_SPEC")); } + #[test] + fn test_swagger_html_template_renders_valid_quotes() { + assert!( + !SWAGGER_UI_HTML.contains(r#"\""#), + "Swagger template should not contain literal backslash-quotes: {SWAGGER_UI_HTML}" + ); + assert!( + SWAGGER_UI_HTML.contains(r#"href="https://unpkg.com/swagger-ui-dist/swagger-ui.css""#) + ); + assert!( + SWAGGER_UI_HTML + .contains(r#"src="https://unpkg.com/swagger-ui-dist/swagger-ui-bundle.js""#) + ); + assert!(SWAGGER_UI_HTML.contains(r##"dom_id: "#swagger-ui""##)); + } + + #[test] + fn test_redoc_html_template_renders_valid_quotes() { + assert!( + !REDOC_HTML.contains(r#"\""#), + "ReDoc template should not contain literal backslash-quotes: {REDOC_HTML}" + ); + assert!( + REDOC_HTML.contains(r#"href="https://unpkg.com/redoc/bundles/redoc.standalone.css""#) + ); + assert!( + REDOC_HTML.contains(r#"src="https://unpkg.com/redoc/bundles/redoc.standalone.js""#) + ); + assert!(REDOC_HTML.contains(r#"document.getElementById("redoc-container")"#)); + } + #[test] fn test_parse_server_struct_url_only() { // Test server struct parsing via AutoRouterInput