Ctrl K
ComunidadGuías…

vite.config.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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(),
  ],
})