- Add smart JSON export/import with schema validation and deduplication - Add per-account proxy configurations (Issue #79) - Add advanced account sorting engine (Issues #126 & #99) - Add compact horizontal layout, AI credits, inline model visibility (Issues #145 & #134) - Add desktop push notifications for low quota (Issue #53) - Fix Arch Linux AUR process detection bug (Issue #117) - Default theme set to Dark Mode (it's better) - UI Polishing: Improved sort dropdown and symmetrical dialog layouts - Dev Mode: Resolved port conflicts and single-instance locks - Updated README and README.zh-CN with new features
63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import { defineConfig, loadEnv } from 'vite';
|
|
import react from '@vitejs/plugin-react';
|
|
import tailwindcss from '@tailwindcss/vite';
|
|
import { tanstackRouter } from '@tanstack/router-plugin/vite';
|
|
import path from 'path';
|
|
import { codeInspectorPlugin } from 'code-inspector-plugin';
|
|
import { sentryVitePlugin } from '@sentry/vite-plugin';
|
|
|
|
export default defineConfig(({ mode }) => {
|
|
const env = loadEnv(mode, process.cwd(), '');
|
|
const sentryAuthToken = process.env.SENTRY_AUTH_TOKEN || env.SENTRY_AUTH_TOKEN;
|
|
const shouldEnableSentry = mode === 'production' && Boolean(sentryAuthToken);
|
|
|
|
return {
|
|
plugins: [
|
|
...(shouldEnableSentry
|
|
? [
|
|
sentryVitePlugin({
|
|
org: process.env.SENTRY_ORG || env.SENTRY_ORG,
|
|
project: process.env.SENTRY_PROJECT || env.SENTRY_PROJECT,
|
|
authToken: sentryAuthToken,
|
|
release: {
|
|
name: `${process.env.npm_package_name}@${process.env.npm_package_version}`,
|
|
},
|
|
// Electron loads files from app://, so we need to normalize paths for Source Map matching
|
|
sourcemaps: {
|
|
// Rewrite the source paths to strip the Electron app:// protocol
|
|
rewriteSources: (source) => {
|
|
// Transform: app:///.vite/renderer/main_window/assets/index.js
|
|
// Into: ~/.vite/renderer/main_window/assets/index.js
|
|
return source.replace(/^app:\/\/\//, '~/');
|
|
},
|
|
},
|
|
}),
|
|
]
|
|
: []),
|
|
tanstackRouter({
|
|
target: 'react',
|
|
autoCodeSplitting: true,
|
|
}),
|
|
tailwindcss(),
|
|
react({
|
|
babel: {
|
|
plugins: ['babel-plugin-react-compiler'],
|
|
},
|
|
}),
|
|
codeInspectorPlugin({ bundler: 'vite' }),
|
|
],
|
|
optimizeDeps: {
|
|
entries: ['index.html'],
|
|
},
|
|
define: {
|
|
'process.env.SENTRY_DSN': JSON.stringify(process.env.SENTRY_DSN || env.SENTRY_DSN),
|
|
},
|
|
resolve: {
|
|
preserveSymlinks: true,
|
|
alias: {
|
|
'@': path.resolve(process.cwd(), './src'),
|
|
},
|
|
},
|
|
};
|
|
});
|