mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2026-10-19 09:22:12 +00:00
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import { sveltekit } from '@sveltejs/kit/vite';
|
|
import { enhancedImages } from '@sveltejs/enhanced-img';
|
|
import { defineConfig, type Plugin } from 'vite';
|
|
import tailwindcss from '@tailwindcss/vite';
|
|
import wasm from 'vite-plugin-wasm';
|
|
|
|
/** Whether the website is built for the desktop app (`npm run build:desktop`), which only has the app. */
|
|
const desktop = process.env.BUILD_TARGET === 'desktop';
|
|
|
|
/** The pages of the website, which the desktop app opens on gpx.studio: home, help and embed. */
|
|
const websitePage = /\/src\/routes\/\[\[language\]\]\/(\+page\.|help\/|embed\/)/;
|
|
|
|
/** The help guides, which the server imports too (for the titles of the pages). */
|
|
const guide = /\/src\/lib\/docs\/.*\.mdx$/;
|
|
|
|
/**
|
|
* For the desktop app, empties the pages of the website, the help guides and the WebAssembly engine
|
|
* (the app has its own), so that their code, images and the module are not in the build.
|
|
*/
|
|
function desktopBuild(): Plugin {
|
|
return {
|
|
name: 'desktop-build',
|
|
enforce: 'pre',
|
|
load(id) {
|
|
const path = id.split('?')[0];
|
|
if (websitePage.test(path)) {
|
|
// no entries: the page is not prerendered
|
|
return path.endsWith('.server.ts') ? 'export const entries = () => [];' : '';
|
|
}
|
|
if (guide.test(path)) {
|
|
return "---\ntitle: ''\n---\n";
|
|
}
|
|
if (path.endsWith('/src/lib/engine/backend/wasm.ts')) {
|
|
return `export async function createWasmBackend() {
|
|
throw new Error('The desktop app has no WebAssembly engine');
|
|
}`;
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
...(desktop ? [desktopBuild()] : []),
|
|
enhancedImages(),
|
|
tailwindcss(),
|
|
wasm(),
|
|
sveltekit(),
|
|
],
|
|
});
|