feat(web/m7-363): vite plugin injects Go template tokens at build
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500&family=Inter:wght@400;500&family=JetBrains+Mono:wght@400;500&display=swap"
|
href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500&family=Inter:wght@400;500&family=JetBrains+Mono:wght@400;500&display=swap"
|
||||||
/>
|
/>
|
||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
|
<!-- MINSTREL_TOKENS -->
|
||||||
</head>
|
</head>
|
||||||
<body class="bg-background text-text-primary">
|
<body class="bg-background text-text-primary">
|
||||||
<div style="display: contents">%sveltekit.body%</div>
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
|
|||||||
+27
-1
@@ -9,8 +9,34 @@ const tokensPlugin = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Build-only plugin that injects Go html/template tokens into the
|
||||||
|
// rendered index.html so the runtime Go server can substitute per-
|
||||||
|
// instance branding. In dev (`vite dev`), the marker stays as a
|
||||||
|
// comment and the SPA falls back to the literal app.html title.
|
||||||
|
const injectGoTokensPlugin = {
|
||||||
|
name: 'minstrel-inject-go-tokens',
|
||||||
|
apply: 'build' as const,
|
||||||
|
enforce: 'post' as const,
|
||||||
|
transformIndexHtml(html: string) {
|
||||||
|
const titleTag = `<title>{{ .AppName }}</title>`;
|
||||||
|
const headBlock = `
|
||||||
|
<meta name="description" content="{{ .Description }}">
|
||||||
|
<meta property="og:title" content="{{ .AppName }}">
|
||||||
|
<meta property="og:description" content="{{ .Description }}">
|
||||||
|
<meta property="og:image" content="/brand/og-image.png">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#14171A">
|
||||||
|
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#F8F5EE">
|
||||||
|
<script>window.__MINSTREL__ = { appName: "{{ .AppName }}", description: "{{ .Description }}" };</script>`;
|
||||||
|
return html
|
||||||
|
.replace('<title>Minstrel</title>', titleTag)
|
||||||
|
.replace('<!-- MINSTREL_TOKENS -->', headBlock);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [tokensPlugin, sveltekit()],
|
plugins: [tokensPlugin, sveltekit(), injectGoTokensPlugin],
|
||||||
server: {
|
server: {
|
||||||
port: 5173,
|
port: 5173,
|
||||||
proxy: {
|
proxy: {
|
||||||
|
|||||||
Reference in New Issue
Block a user