2024-07-10 16:44:39 +00:00
import { cloudflareDevProxyVitePlugin as remixCloudflareDevProxy , vitePlugin as remixVitePlugin } from '@remix-run/dev' ;
import UnoCSS from 'unocss/vite' ;
2024-10-07 14:20:42 +00:00
import { defineConfig , type ViteDevServer } from 'vite' ;
2024-07-17 18:54:46 +00:00
import { nodePolyfills } from 'vite-plugin-node-polyfills' ;
import { optimizeCssModules } from 'vite-plugin-optimize-css-modules' ;
2024-07-10 16:44:39 +00:00
import tsconfigPaths from 'vite-tsconfig-paths' ;
2024-12-20 19:33:28 +00:00
import { execSync } from 'child_process' ;
// Get git hash with fallback
const getGitHash = ( ) = > {
try {
return execSync ( 'git rev-parse --short HEAD' ) . toString ( ) . trim ( ) ;
} catch {
return 'no-git-info' ;
}
} ;
2024-07-10 16:44:39 +00:00
export default defineConfig ( ( config ) = > {
return {
2024-12-20 19:33:28 +00:00
define : {
__COMMIT_HASH__ : JSON.stringify ( getGitHash ( ) ) ,
__APP_VERSION__ : JSON.stringify ( process . env . npm_package_version ) ,
} ,
2024-07-17 19:31:47 +00:00
build : {
target : 'esnext' ,
} ,
2024-07-10 16:44:39 +00:00
plugins : [
2024-07-17 18:54:46 +00:00
nodePolyfills ( {
2024-07-25 15:28:23 +00:00
include : [ 'path' , 'buffer' ] ,
2024-07-17 18:54:46 +00:00
} ) ,
2024-07-10 16:44:39 +00:00
config . mode !== 'test' && remixCloudflareDevProxy ( ) ,
remixVitePlugin ( {
future : {
v3_fetcherPersist : true ,
v3_relativeSplatPath : true ,
2024-12-15 20:20:22 +00:00
v3_throwAbortReason : true ,
v3_lazyRouteDiscovery : true
2024-07-10 16:44:39 +00:00
} ,
} ) ,
UnoCSS ( ) ,
tsconfigPaths ( ) ,
2024-10-07 14:20:42 +00:00
chrome129IssuePlugin ( ) ,
2024-07-17 18:54:46 +00:00
config . mode === 'production' && optimizeCssModules ( { apply : 'build' } ) ,
2024-07-10 16:44:39 +00:00
] ,
2024-12-18 16:25:17 +00:00
envPrefix : [ "VITE_" , "OPENAI_LIKE_API_BASE_URL" , "OLLAMA_API_BASE_URL" , "LMSTUDIO_API_BASE_URL" , "TOGETHER_API_BASE_URL" ] ,
2024-10-21 22:27:29 +00:00
css : {
preprocessorOptions : {
scss : {
api : 'modern-compiler' ,
} ,
} ,
} ,
2024-07-10 16:44:39 +00:00
} ;
} ) ;
2024-10-07 14:20:42 +00:00
function chrome129IssuePlugin() {
return {
name : 'chrome129IssuePlugin' ,
configureServer ( server : ViteDevServer ) {
server . middlewares . use ( ( req , res , next ) = > {
const raw = req . headers [ 'user-agent' ] ? . match ( /Chrom(e|ium)\/([0-9]+)\./ ) ;
if ( raw ) {
const version = parseInt ( raw [ 2 ] , 10 ) ;
if ( version === 129 ) {
res . setHeader ( 'content-type' , 'text/html' ) ;
res . end (
'<body><h1>Please use Chrome Canary for testing.</h1><p>Chrome 129 has an issue with JavaScript modules & Vite local development, see <a href="https://github.com/stackblitz/bolt.new/issues/86#issuecomment-2395519258">for more information.</a></p><p><b>Note:</b> This only impacts <u>local development</u>. `pnpm run build` and `pnpm run start` will work fine in this browser.</p></body>' ,
) ;
return ;
}
}
next ( ) ;
} ) ;
} ,
} ;
}