From 007c61239fa859cb3f6cbf9769db48805c34bd0e Mon Sep 17 00:00:00 2001 From: ehsan amiri Date: Wed, 2 Sep 2026 00:58:01 +0330 Subject: [PATCH 1/5] Vendor Swagger UI assets for offline docs. Serve swagger-ui-dist 5.18.3 from /swagger/assets in Python, Node, and C# instead of unpkg CDN, and disable online validatorUrl by default. Co-authored-by: Cursor --- .../FusionFramework/FusionFramework.csproj | 1 + bindings/csharp/FusionFramework/Swagger.cs | 47 +++- .../FusionFramework/static/swagger-ui/LICENSE | 202 ++++++++++++++++++ .../FusionFramework/static/swagger-ui/VERSION | 1 + .../static/swagger-ui/favicon-32x32.png | Bin 0 -> 628 bytes .../static/swagger-ui/swagger-ui-bundle.js | 2 + .../swagger-ui-standalone-preset.js | 2 + .../static/swagger-ui/swagger-ui.css | 3 + crates/fusion-node/index.js | 43 +++- crates/fusion-node/package.json | 1 + crates/fusion-node/static/swagger-ui/LICENSE | 202 ++++++++++++++++++ crates/fusion-node/static/swagger-ui/VERSION | 1 + .../static/swagger-ui/favicon-32x32.png | Bin 0 -> 628 bytes .../static/swagger-ui/swagger-ui-bundle.js | 2 + .../swagger-ui-standalone-preset.js | 2 + .../static/swagger-ui/swagger-ui.css | 3 + .../fusion-py/python/fusion_framework/app.py | 45 +++- .../static/swagger-ui/LICENSE | 202 ++++++++++++++++++ .../static/swagger-ui/VERSION | 1 + .../static/swagger-ui/favicon-32x32.png | Bin 0 -> 628 bytes .../static/swagger-ui/swagger-ui-bundle.js | 2 + .../swagger-ui-standalone-preset.js | 2 + .../static/swagger-ui/swagger-ui.css | 3 + .../python/fusion_framework/test_swagger.py | 8 + 24 files changed, 763 insertions(+), 12 deletions(-) create mode 100644 bindings/csharp/FusionFramework/static/swagger-ui/LICENSE create mode 100644 bindings/csharp/FusionFramework/static/swagger-ui/VERSION create mode 100644 bindings/csharp/FusionFramework/static/swagger-ui/favicon-32x32.png create mode 100644 bindings/csharp/FusionFramework/static/swagger-ui/swagger-ui-bundle.js create mode 100644 bindings/csharp/FusionFramework/static/swagger-ui/swagger-ui-standalone-preset.js create mode 100644 bindings/csharp/FusionFramework/static/swagger-ui/swagger-ui.css create mode 100644 crates/fusion-node/static/swagger-ui/LICENSE create mode 100644 crates/fusion-node/static/swagger-ui/VERSION create mode 100644 crates/fusion-node/static/swagger-ui/favicon-32x32.png create mode 100644 crates/fusion-node/static/swagger-ui/swagger-ui-bundle.js create mode 100644 crates/fusion-node/static/swagger-ui/swagger-ui-standalone-preset.js create mode 100644 crates/fusion-node/static/swagger-ui/swagger-ui.css create mode 100644 crates/fusion-py/python/fusion_framework/static/swagger-ui/LICENSE create mode 100644 crates/fusion-py/python/fusion_framework/static/swagger-ui/VERSION create mode 100644 crates/fusion-py/python/fusion_framework/static/swagger-ui/favicon-32x32.png create mode 100644 crates/fusion-py/python/fusion_framework/static/swagger-ui/swagger-ui-bundle.js create mode 100644 crates/fusion-py/python/fusion_framework/static/swagger-ui/swagger-ui-standalone-preset.js create mode 100644 crates/fusion-py/python/fusion_framework/static/swagger-ui/swagger-ui.css diff --git a/bindings/csharp/FusionFramework/FusionFramework.csproj b/bindings/csharp/FusionFramework/FusionFramework.csproj index a23949d..1bd4cc0 100644 --- a/bindings/csharp/FusionFramework/FusionFramework.csproj +++ b/bindings/csharp/FusionFramework/FusionFramework.csproj @@ -25,5 +25,6 @@ + diff --git a/bindings/csharp/FusionFramework/Swagger.cs b/bindings/csharp/FusionFramework/Swagger.cs index ede2688..349a98f 100644 --- a/bindings/csharp/FusionFramework/Swagger.cs +++ b/bindings/csharp/FusionFramework/Swagger.cs @@ -18,6 +18,7 @@ public static void Mount(FusionApp app, FusionSettings settings) var labels = ApplyVersionNavbar(swagger); var combined = BuildOpenApi(swagger); + MountAssets(app, prefix); app.AddRawRoute("GET", $"{prefix}/openapi.json", () => combined); app.AddRawRoute("GET", prefix, () => Html(UiHtml(swagger, $"{prefix}/openapi.json"))); if (prefix != "/") @@ -110,7 +111,7 @@ sealed class SwaggerConfig ["showCommonExtensions"] = false, ["syntaxHighlight"] = new JsonObject { ["activated"] = true, ["theme"] = "agate" }, ["withCredentials"] = false, - ["validatorUrl"] = "https://validator.swagger.io/validator", + ["validatorUrl"] = null, }; var uiOverlay = AsObject(settings.Get("swagger.ui", new { })); if (uiOverlay is not null) @@ -400,7 +401,7 @@ static string UiHtml(SwaggerConfig swagger, string openapiUrl, string? primaryNa """ : ""; var standalone = navbarEnabled - ? """""" + ? $"""""" : ""; var navbarJs = navbarEnabled ? "true" : "false"; @@ -411,12 +412,12 @@ static string UiHtml(SwaggerConfig swagger, string openapiUrl, string? primaryNa {{title}} - + {{hideUrlCss}}
- + {{standalone}} ` + ? `` : '' return ` @@ -854,12 +888,12 @@ function swaggerUiHtml(swagger, openapiUrl, primaryName = null) { ${title} - + ${hideUrlCss}
- + ${standaloneScript} ' + f'' ) bootstrap = f""" @@ -262,12 +298,12 @@ def _swagger_ui_html(swagger: dict[str, Any], openapi_url: str, primary_name: st {title} - + {hide_url_css}
- + {standalone_script}