feat(export): single-file offline keepsake viewer + guest download
Rebuild the guest "keepsake" (offline HTML gallery) so it renders when the extracted index.html is opened over file://. Browsers block external ES-module scripts and fetch() at origin null, so a normal multi-file SvelteKit build shows a blank window. Build the viewer as one self-contained index.html (inlined JS/CSS via vite-plugin-singlefile, standalone non-SvelteKit entry) and inject the data as window.__EXPORT_DATA__; the backend embeds the built viewer via include_dir! and writes the data global into index.html when zipping. Also surface the guest-facing download: a feed banner and the BottomNav Export tab, both shown once the host releases the export. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
25
frontend/export-viewer/vite.standalone.config.js
Normal file
25
frontend/export-viewer/vite.standalone.config.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import { svelte, vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
||||
import tailwindcss from '@tailwindcss/vite';
|
||||
import { viteSingleFile } from 'vite-plugin-singlefile';
|
||||
import { defineConfig } from 'vite';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
// Builds the keepsake viewer as ONE self-contained index.html (all JS + CSS
|
||||
// inlined) so it renders when opened via file://. Uses the plain Svelte plugin
|
||||
// (not SvelteKit) because SvelteKit emits multiple module entry points, which
|
||||
// cannot be inlined into a single file.
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
tailwindcss(),
|
||||
svelte({ configFile: false, preprocess: vitePreprocess(), compilerOptions: { runes: true } }),
|
||||
viteSingleFile()
|
||||
],
|
||||
resolve: {
|
||||
alias: { $lib: fileURLToPath(new URL('./src/lib', import.meta.url)) }
|
||||
},
|
||||
build: {
|
||||
outDir: fileURLToPath(new URL('../../backend/static/export-viewer', import.meta.url)),
|
||||
emptyOutDir: true,
|
||||
target: 'es2020'
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user