afv-library/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/vite.config.ts

104 lines
2.9 KiB
TypeScript
Raw Normal View History

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
import { resolve } from 'path';
import tailwindcss from '@tailwindcss/vite';
import salesforce from '@salesforce/vite-plugin-webapp-experimental';
import codegen from 'vite-plugin-graphql-codegen';
export default defineConfig(({ mode }) => {
return {
// Ensure root base for e2e/static serve; plugin may override when deployed under a path
base: '/',
// Type assertion avoids Plugin type mismatch when dist has its own node_modules (vite/rollup)
plugins: [
tailwindcss(),
react(),
salesforce(),
codegen({
// Path to the codegen config file
configFilePathOverride: resolve(__dirname, 'codegen.yml'),
// Run codegen on dev server start
runOnStart: true,
// Don't run codegen on build for now
runOnBuild: false,
// Enable file watcher during development
enableWatcher: true,
// Fail build if codegen errors
throwOnBuild: true,
}),
] as import('vite').PluginOption[],
// Build configuration for MPA
build: {
outDir: resolve(__dirname, 'dist'),
assetsDir: 'assets',
sourcemap: false,
},
// Resolve aliases (shared between build and test)
resolve: {
dedupe: ['react', 'react-dom'],
alias: {
'@': path.resolve(__dirname, './src'),
'@api': path.resolve(__dirname, './src/api'),
'@components': path.resolve(__dirname, './src/components'),
'@utils': path.resolve(__dirname, './src/utils'),
'@styles': path.resolve(__dirname, './src/styles'),
'@assets': path.resolve(__dirname, './src/assets'),
},
},
// Vitest configuration
test: {
// Override root for tests (build uses src/pages as root)
root: resolve(__dirname),
// Use jsdom environment for React component testing
environment: 'jsdom',
// Setup files to run before each test
setupFiles: ['./src/test/setup.ts'],
// Global test patterns
include: [
'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
'src/**/__tests__/**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
],
// Coverage configuration
coverage: {
provider: 'v8',
reporter: ['text', 'html', 'clover', 'json'],
exclude: [
'node_modules/',
'src/test/',
'src/**/*.d.ts',
'src/main.tsx',
'src/vite-env.d.ts',
'src/components/**/index.ts',
'**/*.config.ts',
'build/',
'dist/',
'coverage/',
'eslint.config.js',
],
thresholds: {
global: {
branches: 85,
functions: 85,
lines: 85,
statements: 85,
},
},
},
// Test timeout
testTimeout: 10000,
// Globals for easier testing
globals: true,
},
};
});