From 9eb22ddc19eca4b3ec8415d5f891c225ec1ee0c8 Mon Sep 17 00:00:00 2001
From: Gusted <postmaster@gusted.xyz>
Date: Wed, 24 Jul 2024 22:41:25 +0200
Subject: [PATCH] [CHORE] Proper chunking for swagger

- Tell webpack to chunk the swagger-ui dependency, so it can be re-used for the
forgejo-swagger.js and swagger.js files (these two files are two
seperate javascript files in the output).
- This saves off 400KB when Forgejo is built with the `bindata` build
tag.
---
 web_src/js/standalone/forgejo-swagger.js | 7 ++++---
 web_src/js/standalone/swagger.js         | 8 +++++---
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/web_src/js/standalone/forgejo-swagger.js b/web_src/js/standalone/forgejo-swagger.js
index 896a1364c3..b7550b8396 100644
--- a/web_src/js/standalone/forgejo-swagger.js
+++ b/web_src/js/standalone/forgejo-swagger.js
@@ -1,7 +1,8 @@
-import SwaggerUI from 'swagger-ui-dist/swagger-ui-es-bundle.js';
-import 'swagger-ui-dist/swagger-ui.css';
-
 window.addEventListener('load', async () => {
+  const [{default: SwaggerUI}] = await Promise.all([
+    import(/* webpackChunkName: "swagger-ui" */'swagger-ui-dist/swagger-ui-es-bundle.js'),
+    import(/* webpackChunkName: "swagger-ui" */'swagger-ui-dist/swagger-ui.css'),
+  ]);
   const url = document.getElementById('swagger-ui').getAttribute('data-source');
 
   const ui = SwaggerUI({
diff --git a/web_src/js/standalone/swagger.js b/web_src/js/standalone/swagger.js
index 00854ef5d7..ec2115ec60 100644
--- a/web_src/js/standalone/swagger.js
+++ b/web_src/js/standalone/swagger.js
@@ -1,7 +1,9 @@
-import SwaggerUI from 'swagger-ui-dist/swagger-ui-es-bundle.js';
-import 'swagger-ui-dist/swagger-ui.css';
-
 window.addEventListener('load', async () => {
+  const [{default: SwaggerUI}] = await Promise.all([
+    import(/* webpackChunkName: "swagger-ui" */'swagger-ui-dist/swagger-ui-es-bundle.js'),
+    import(/* webpackChunkName: "swagger-ui" */'swagger-ui-dist/swagger-ui.css'),
+  ]);
+
   const url = document.getElementById('swagger-ui').getAttribute('data-source');
   const res = await fetch(url);
   const spec = await res.json();