diff options
| -rw-r--r-- | src/app/App.svelte | 6 | ||||
| -rw-r--r-- | src/core/metrics/place.ts | 14 | ||||
| -rw-r--r-- | src/vite-env.d.ts | 3 | ||||
| -rw-r--r-- | vite.config.ts | 14 |
4 files changed, 33 insertions, 4 deletions
diff --git a/src/app/App.svelte b/src/app/App.svelte index 3024a44..41e68ef 100644 --- a/src/app/App.svelte +++ b/src/app/App.svelte @@ -301,6 +301,12 @@ onClose={(id) => store.closeTab(id)} onNewDraft={() => store.newDraft()} /> + <span + class="shrink-0 select-none px-1 font-mono text-[10px] leading-none text-base-content/30" + title="Build version (git short hash)" + > + {__APP_VERSION__} + </span> <button class="btn btn-square btn-ghost btn-sm mx-1 shrink-0" aria-label="Toggle sidebar" diff --git a/src/core/metrics/place.ts b/src/core/metrics/place.ts index 091fe8f..2402e3e 100644 --- a/src/core/metrics/place.ts +++ b/src/core/metrics/place.ts @@ -111,8 +111,11 @@ export function interleaveTurnMetrics( } if (bestEntry >= 0) { usedEntries.add(bestEntry); - segmentEntry.set(seg, entries[bestEntry]!); - segmentEntryIndex.set(seg, bestEntry); + const e = entries[bestEntry]; + if (e !== undefined) { + segmentEntry.set(seg, e); + segmentEntryIndex.set(seg, bestEntry); + } } } @@ -123,8 +126,11 @@ export function interleaveTurnMetrics( while (nextUnused < K && usedEntries.has(nextUnused)) nextUnused++; if (nextUnused < K) { usedEntries.add(nextUnused); - segmentEntry.set(seg, entries[nextUnused]!); - segmentEntryIndex.set(seg, nextUnused); + const e = entries[nextUnused]; + if (e !== undefined) { + segmentEntry.set(seg, e); + segmentEntryIndex.set(seg, nextUnused); + } nextUnused++; } } diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 4078e74..2a2b515 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1,2 +1,5 @@ /// <reference types="svelte" /> /// <reference types="vite/client" /> + +/** 5-char git short hash, baked at build time (vite.config.ts `define`). */ +declare const __APP_VERSION__: string; diff --git a/vite.config.ts b/vite.config.ts index 8ca4beb..bdfabe6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,3 +1,4 @@ +import { execSync } from "node:child_process"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import tailwindcss from "@tailwindcss/vite"; import { svelteTesting } from "@testing-library/svelte/vite"; @@ -15,9 +16,22 @@ export default defineConfig({ // disables Vite's DNS-rebinding host check. (The WS URL still runs in the browser — set // VITE_WS_URL to the backend's reachable host when browsing from another device.) server: { port: 24204, host: true, allowedHosts: true }, + define: { + // Bake the 5-char git short hash at build time so it survives bundling + // (incl. arch package deploys). Falls back to "dev" when not in a git repo. + __APP_VERSION__: JSON.stringify(getGitShortHash()), + }, test: { environment: "jsdom", globals: true, setupFiles: ["./vitest-setup.ts"], }, }); + +function getGitShortHash(): string { + try { + return execSync("git rev-parse --short=5 HEAD", { encoding: "utf-8" }).trim(); + } catch { + return "dev"; + } +} |
