vite.config.ts
Rama main · réplica de lectura del repositorio original.
import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'
import tailwindcss from '@tailwindcss/vite'
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import viteReact from '@vitejs/plugin-react'
import { nitro } from 'nitro/vite'
import { defineConfig } from 'vite'
import { devMigrations } from './scripts/vite-dev-migrations'
const divetracxEdition = process.env.DIVETRACX_EDITION ?? 'standard'
if (divetracxEdition !== 'standard' && divetracxEdition !== 'demo') {
throw new Error('DIVETRACX_EDITION must be standard or demo')
}
const demoAssets = () => ({
name: 'divetracx-demo-assets',
generateBundle(this: { emitFile: (asset: object) => void }) {
for (const filename of [
'profile-diver.webp',
'wreck-diver-front.webp',
'wreck-diver-back.webp',
'coral-lantern-reef.webp',
'azure-step-wall.webp',
'north-basin-wreck.webp',
]) {
this.emitFile({
type: 'asset',
fileName: `media/demo/${filename}`,
source: readFileSync(resolve('scripts/seed-assets/demo', filename)),
})
}
},
})
export default defineConfig({
server: { allowedHosts: true },
preview: { allowedHosts: true },
define: {
__DIVETRACX_DEMO_MODE__: JSON.stringify(divetracxEdition === 'demo'),
},
resolve: {
alias:
divetracxEdition === 'demo'
? [{ find: /^@\/db$/, replacement: resolve('src/db/demo.ts') }]
: [],
tsconfigPaths: true,
dedupe: ['react', 'react-dom'],
},
plugins: [
devMigrations(),
...(divetracxEdition === 'demo' ? [demoAssets()] : []),
tailwindcss(),
tanstackStart(),
nitro({
preset: divetracxEdition === 'demo' ? 'vercel' : 'bun',
routes: {
...(divetracxEdition === 'demo'
? {}
: { '/media/**': './src/lib/server/media-handler.ts' }),
'/profile-card.png': './src/lib/server/profile-card-handler.ts',
},
}),
viteReact(),
],
})