mirror of
https://github.com/thelounge/thelounge.git
synced 2026-06-11 07:04:37 -04:00
``` Webpack vs Vite Build Comparison ┌────────────┬──────────────────────┬────────────────────┬───────────────┐ │ Metric │ Webpack 5 │ Vite 8 (Rolldown) │ Change │ ├────────────┼──────────────────────┼────────────────────┼───────────────┤ │ Build time │ 1,961ms (2.96s wall) │ 612ms (0.82s wall) │ 3.2x faster │ ├────────────┼──────────────────────┼────────────────────┼───────────────┤ │ CPU time │ 11.0s user │ 1.3s user │ 8.5x less CPU │ └────────────┴──────────────────────┴────────────────────┴───────────────┘ Bundle sizes (gzipped) ┌────────────────┬─────────┬────────┬────────┐ │ Asset │ Webpack │ Vite │ Change │ ├────────────────┼─────────┼────────┼────────┤ │ App JS │ 152.6K │ 104.9K │ -31% │ ├────────────────┼─────────┼────────┼────────┤ │ Vendor JS │ 251.1K │ 81.6K │ -68% │ ├────────────────┼─────────┼────────┼────────┤ │ Runtime JS │ — │ 0.5K │ new │ ├────────────────┼─────────┼────────┼────────┤ │ Total JS │ 403.7K │ 187.0K │ -54% │ ├────────────────┼─────────┼────────┼────────┤ │ CSS │ 12.5K │ 11.9K │ -5% │ ├────────────────┼─────────┼────────┼────────┤ │ Total transfer │ 416.2K │ 198.9K │ -52% │ └────────────────┴─────────┴────────┴────────┘ Raw (uncompressed) ┌───────────────┬─────────┬──────┬────────┐ │ Asset │ Webpack │ Vite │ Change │ ├───────────────┼─────────┼──────┼────────┤ │ App JS │ 1.3M │ 304K │ -77% │ ├───────────────┼─────────┼──────┼────────┤ │ Vendor JS │ 1.1M │ 236K │ -79% │ ├───────────────┼─────────┼──────┼────────┤ │ CSS │ 64K │ 56K │ -13% │ ├───────────────┼─────────┼──────┼────────┤ │ Total public/ │ 5.1M │ 3.4M │ -33% │ └───────────────┴─────────┴──────┴────────┘ ``` --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import Config from "../config";
|
|
import packages from "./packages/index";
|
|
|
|
function escapeAttr(str: string): string {
|
|
return str.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
}
|
|
|
|
export function injectServerConfig(html: string): string {
|
|
const theme = escapeAttr(Config.values.theme);
|
|
const themeColor = escapeAttr(Config.values.themeColor);
|
|
const stylesheets = packages.getStylesheets();
|
|
|
|
const themeLink = `<link id="theme" rel="stylesheet" href="themes/${theme}.css" data-server-theme="${theme}">`;
|
|
const packageLinks = stylesheets
|
|
.map((css) => `\t<link rel="stylesheet" href="packages/${escapeAttr(css)}">`)
|
|
.join("\n");
|
|
|
|
// Inject theme/package CSS after Vite's styles so theme overrides take effect
|
|
const headInsert = [themeLink, packageLinks, `<style id="user-specified-css"></style>`]
|
|
.filter(Boolean)
|
|
.join("\n\t");
|
|
|
|
return html
|
|
.replace("</head>", `\t${headInsert}\n\t</head>`)
|
|
.replace(/<!--thelounge-themecolor-->/g, themeColor)
|
|
.replace("<!--thelounge-bodyclass-->", Config.values.public ? "public" : "")
|
|
.replace(
|
|
"<!--thelounge-transports-->",
|
|
escapeAttr(JSON.stringify(Config.values.transports))
|
|
);
|
|
}
|