From cf3f8e807a4e3cb8d42ab3afa11d552c13b94540 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Sat, 18 Apr 2026 16:01:58 +0800 Subject: [PATCH] Avoid top-level await (#37272) --- .../css/{swagger.css => swagger-render.css} | 28 ------------------ web_src/css/swagger-standalone.css | 29 +++++++++++++++++++ .../plugins/frontend-openapi-swagger.ts | 8 +++-- web_src/js/swagger.ts | 2 +- 4 files changed, 35 insertions(+), 32 deletions(-) rename web_src/css/{swagger.css => swagger-render.css} (52%) create mode 100644 web_src/css/swagger-standalone.css diff --git a/web_src/css/swagger.css b/web_src/css/swagger-render.css similarity index 52% rename from web_src/css/swagger.css rename to web_src/css/swagger-render.css index c20eda7948d..1def667e505 100644 --- a/web_src/css/swagger.css +++ b/web_src/css/swagger-render.css @@ -1,9 +1,5 @@ @import "../../node_modules/swagger-ui-dist/swagger-ui.css"; -body { - margin: 0; -} - html, html body, html .swagger-ui, @@ -15,27 +11,3 @@ html .swagger-ui .scheme-container { html.dark-mode .swagger-ui table.headers td { color: var(--color-text) !important; } - -.swagger-back-link { - color: var(--color-primary); - text-decoration: none; - position: absolute; - top: 1rem; - right: 1.5rem; - display: flex; - align-items: center; -} - -.swagger-back-link:hover { - text-decoration: underline; -} - -.swagger-back-link svg { - color: inherit; - fill: currentcolor; - margin-right: 0.5rem; -} - -.swagger-spec-content { - display: none; -} diff --git a/web_src/css/swagger-standalone.css b/web_src/css/swagger-standalone.css new file mode 100644 index 00000000000..ae36ab49cf5 --- /dev/null +++ b/web_src/css/swagger-standalone.css @@ -0,0 +1,29 @@ +@import "swagger-render.css"; + +body { + margin: 0; +} + +.swagger-back-link { + color: var(--color-primary); + text-decoration: none; + position: absolute; + top: 1rem; + right: 1.5rem; + display: flex; + align-items: center; +} + +.swagger-back-link:hover { + text-decoration: underline; +} + +.swagger-back-link svg { + color: inherit; + fill: currentcolor; + margin-right: 0.5rem; +} + +.swagger-spec-content { + display: none; +} diff --git a/web_src/js/render/plugins/frontend-openapi-swagger.ts b/web_src/js/render/plugins/frontend-openapi-swagger.ts index cc8d3451f24..99410fd496a 100644 --- a/web_src/js/render/plugins/frontend-openapi-swagger.ts +++ b/web_src/js/render/plugins/frontend-openapi-swagger.ts @@ -2,12 +2,14 @@ import type {FrontendRenderFunc} from '../plugin.ts'; import {initSwaggerUI} from '../swagger.ts'; // HINT: SWAGGER-CSS-IMPORT: this import is also necessary when swagger is used as a frontend external render -// It must be on top-level, doesn't work in a function -// Static import doesn't work (it needs to use manifest.json to manually add the CSS file) -await import('../../../css/swagger.css'); +// But it can't share the same CSS file with the standalone page: it triggers our Vite manifest parser's bug +// Although single top-level "await import(css)" can work, it requires es2022. +// Otherwise, single function-level "await import(css)" can't work due to Vite's dependency analysis and bundling. +import '../../../css/swagger-render.css'; export const frontendRender: FrontendRenderFunc = async (opts): Promise => { try { + await import('../../../css/swagger-render.css'); await initSwaggerUI(opts.container, {specText: opts.contentString()}); return true; } catch (error) { diff --git a/web_src/js/swagger.ts b/web_src/js/swagger.ts index f7a852098a2..ee0fd289367 100644 --- a/web_src/js/swagger.ts +++ b/web_src/js/swagger.ts @@ -1,6 +1,6 @@ // FIXME: INCORRECT-VITE-MANIFEST-PARSER: it just happens to work for current dependencies // If this module depends on another one and that one imports "swagger.css", then {{AssetURI "css/swagger.css"}} won't work -import '../css/swagger.css'; +import '../css/swagger-standalone.css'; import {initSwaggerUI} from './render/swagger.ts'; async function initGiteaAPIViewer() {