Files
documenso/packages/email/preview/vite.config.ts
2026-06-22 14:33:34 +10:00

73 lines
1.9 KiB
TypeScript

import path from 'node:path';
import { lingui } from '@lingui/vite-plugin';
import { reactRouter } from '@react-router/dev/vite';
import autoprefixer from 'autoprefixer';
import tailwindcss from 'tailwindcss';
import { defineConfig } from 'vite';
import macrosPlugin from 'vite-plugin-babel-macros';
import { viteStaticCopy } from 'vite-plugin-static-copy';
import tsconfigPaths from 'vite-tsconfig-paths';
/**
* Standalone Vite app for previewing Documenso emails.
*
* Emails render server-side through the real `renderEmailWithI18N` pipeline
* (see `app/routes/preview.tsx`), so the SSR config mirrors the main Remix app:
* Prisma, the tailwind config, and native modules stay external.
*/
export default defineConfig({
root: __dirname,
css: {
postcss: {
plugins: [tailwindcss(path.join(__dirname, 'tailwind.config.cjs')), autoprefixer],
},
},
server: {
port: parseInt(process.env.PORT || '3002', 10),
strictPort: true,
},
plugins: [
// Serve the email static assets (logo, icons) under `/static` so templates'
// `assetBaseUrl="/static"` resolves to the same images production uses.
viteStaticCopy({
targets: [
{
src: path.join(__dirname, '../static') + '/*',
dest: 'static',
},
],
}),
reactRouter(),
macrosPlugin(),
lingui(),
tsconfigPaths(),
],
ssr: {
noExternal: ['@documenso/email'],
external: [
'@napi-rs/canvas',
'@node-rs/bcrypt',
'@prisma/client',
'@documenso/tailwind-config',
'playwright',
'playwright-core',
'@playwright/browser-chromium',
'pdfjs-dist',
'@google-cloud/kms',
'@google-cloud/secret-manager',
],
},
optimizeDeps: {
exclude: [
'@napi-rs/canvas',
'@node-rs/bcrypt',
'sharp',
'playwright',
'playwright-core',
'@playwright/browser-chromium',
'lightningcss',
'fsevents',
],
},
});